DataSet#foreach(f)
将函数f
应用于数据集中的每一行。在群集环境中,数据在群集中分割。如何收集每个功能的结果?
例如,假设该函数将计算每行中存储的字符数。如何创建一个DataSet或RDD,其中包含应用于每一行的每个函数的结果?
答案 0 :(得分:1)
foreach
的定义类似于:
Scala中的final def foreach(f: (A) ⇒ Unit): Unit
f
:应用于每个元素的副作用的函数。 函数f
的结果被丢弃
foreach
通常用于表示涉及副作用的函数的使用,例如:打印到STDOUT。
如果您想通过应用特定功能返回某些内容,则必须使用map
final def map[B](f: (A) ⇒ B): List[B]
我从List
的文档中复制了语法,但对于RDD也是类似的。
如您所见,它在数据类型f
上运行函数A
并返回数据类型B
的集合,其中A
和B
可以是相同的数据类型。
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))