如何在Spark中存储来自forEach的结果

时间:2017-12-07 01:13:46

标签: apache-spark spark-dataframe

DataSet#foreach(f)将函数f应用于数据集中的每一行。在群集环境中,数据在群集中分割。如何收集每个功能的结果?

例如,假设该函数将计算每行中存储的字符数。如何创建一个DataSet或RDD,其中包含应用于每一行的每个函数的结果?

1 个答案:

答案 0 :(得分:1)

foreach的定义类似于:

final  def  foreach(f: (A) ⇒ Unit): Unit 
     

f:应用于每个元素的副作用的函数。                函数f的结果被丢弃

Scala中的

foreach通常用于表示涉及副作用的函数的使用,例如:打印到STDOUT。

如果您想通过应用特定功能返回某些内容,则必须使用map

final  def  map[B](f: (A) ⇒ B): List[B]

我从List的文档中复制了语法,但对于RDD也是类似的。

如您所见,它在数据类型f上运行函数A并返回数据类型B的集合,其中AB可以是相同的数据类型。

val rdd = sc.parallelize(Array(
      "String1",
      "String2",
      "String3" ))

scala> rdd.foreach(x => (x, x.length) ) 

// Nothing happens

rdd.map(x => (x, x.length) ).collect

// Array[(String, Int)] = Array((String1,7), (String2,7), (String3,7))