Scala 连接多个数据帧的功能方法

Scala 连接多个数据帧的功能方法,scala,apache-spark,Scala,Apache Spark,我从严重的Python滥用中学习到Scala中的Spark,我得到了java.lang.NullPointerException,因为我用Python的方式做事 我有3个数据帧,每个数据帧的形状为4x2,第一列总是索引0,1,2,3,第二列是一些二进制特征。最终目标是拥有一个4x4数据帧,其中包含所有单个数据帧的连接。在python中,我将首先定义一些主df,然后在中间df上循环,在每个循环处将生成的连接数据帧分配给主数据帧变量名(丑): 在Spark中,这不起作用: q=“从表中选择*” va

我从严重的Python滥用中学习到Scala中的Spark,我得到了
java.lang.NullPointerException
,因为我用Python的方式做事

我有3个数据帧,每个数据帧的形状为4x2,第一列总是索引0,1,2,3,第二列是一些二进制特征。最终目标是拥有一个4x4数据帧,其中包含所有单个数据帧的连接。在python中,我将首先定义一些主df,然后在中间df上循环,在每个循环处将生成的连接数据帧分配给主数据帧变量名(丑):

在Spark中,这不起作用:
q=“从表中选择*”
val df=sql(q)
显然有效

scala> val df = df.join(sql(q))
<console>:33: error: recursive value df needs type
       val df = df.join(sql(q))
我认为很有可能我没有按功能性的方式来做。所以我试着(最丑的!):

这看起来很难看,不雅观,而且是初学者。实现这一点的合适的Scala函数方法是什么?

foldLeft

val dataframes: Seq[String] = ???
val df: Dataset[Row] = ???

dataframes.foldLeft(df)((acc, q) => acc.join(sql(q)))
如果您正在寻找与Python代码等价的命令:

var dataframes: Seq[String] = ???  // IMPORTANT: var
for (q <- dataframes ) { df = df.join(sql(q)) }
var数据帧:Seq[String]=???//重要提示:var
对于(q
foldLeft

val dataframes: Seq[String] = ???
val df: Dataset[Row] = ???

dataframes.foldLeft(df)((acc, q) => acc.join(sql(q)))
如果您正在寻找与Python代码等价的命令:

var dataframes: Seq[String] = ???  // IMPORTANT: var
for (q <- dataframes ) { df = df.join(sql(q)) }
var数据帧:Seq[String]=???//重要提示:var
对于(q更简单

val dataframes: Seq[String] = ???
dataframes.reduce(_ join _)
更简单的是

val dataframes: Seq[String] = ???
dataframes.reduce(_ join _)