Apache spark 如何将forEach的结果存储在Spark中
Apache spark 如何将forEach的结果存储在Spark中,apache-spark,spark-dataframe,Apache Spark,Spark Dataframe,DataSet#foreach(f)将函数f应用于数据集中的每一行。在集群环境中,数据在集群中分割。如何收集每个函数的结果 例如,假设函数计算每行中存储的字符数。如何创建一个数据集或RDD,其中包含应用于每行的每个函数的结果?foreach的定义如下所示: f:应用于每个元素的副作用的函数。 函数f的结果被丢弃 Scala中的foreach通常用于表示涉及副作用的函数的使用,例如打印到标准输出 如果要通过应用特定函数返回某些内容,则必须使用map 我从列表的文档中复制了语法,但对于RDD也会类似
DataSet#foreach(f)
将函数f
应用于数据集中的每一行。在集群环境中,数据在集群中分割。如何收集每个函数的结果
例如,假设函数计算每行中存储的字符数。如何创建一个数据集或RDD,其中包含应用于每行的每个函数的结果?foreach的定义如下所示:
f
:应用于每个元素的副作用的函数。
函数f
的结果被丢弃
Scala中的foreach通常用于表示涉及副作用的函数的使用,例如打印到标准输出
如果要通过应用特定函数返回某些内容,则必须使用map
我从列表
的文档中复制了语法,但对于RDD也会类似
如您所见,它在数据类型A
上运行函数f
,并返回数据类型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))
使用
map
而不是foreach
final def map[B](f: (A) ⇒ B): List[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))