2017-04-23 102 views
0

使用union构建一个适当的大型测试数据集,与Spark徘徊在一起。该工程确定:我可以递归地将变换应用于scala中的Spark数据框吗?

val df = spark.read.json("/opt/spark/examples/src/main/resources/people.json") df.union(df).union(df).count() 但我想要做这样的事情: val df = spark.read.json("/opt/spark/examples/src/main/resources/people.json") for (a <- 1 until 10){ df = df.union(df) } 与错误barfs <console>:27: error: reassignment to val df = df.union(df) ^ 我知道这个技术会工作使用python,但使用Scala的,所以我是我的第一次我不确定语法。

我怎样才能递归地联合自己的数据帧n次?

回答

1

如果你在数据集上使用val,它会变成一个不可变的变量。这意味着你不能做任何重新分配。如果您将您的定义更改为var df,则应该使用您的代码。

无可变数据的功能的方法是:

val df = List(1,2,3,4,5).toDF 
val bigDf = (for (a <- 1 until 10) yield df) reduce (_ union _) 

for循环将创建指定长度的IndexedSeq包含您的数据帧和减少功能将采取的第一个数据帧联合它与第二和将启动再次使用结果。

没有更短的循环:

val df = List(1,2,3,4,5).toDF 
val bigDf = 1 until 10 map (_ => df) reduce (_ union _) 
相关问题