将 pyspark 转换为 scala:读取多个目录

Converting pyspark to scala: Reading multiple directories

我有一个 parquet 格式的文件列表,我将这些文件加载​​并合并到 PySpark 中的一个数据帧中。

paths = ['file1', 'file2', 'file3']
df_list = map(lambda x:(spark.read.parquet(x)), paths)
df = reduce(lambda df1, df2: df1.unionAll(df2), df_list)

我想用 Scala 做同样的操作。但是,当我在 Scala 路径列表

上使用地图操作时
val df_list = map(x = > (spark.read.parquet(x)), paths)

我收到以下错误:

:139: error: overloaded method value parquet with alternatives: (paths: String*)org.apache.spark.sql.DataFrame
(path: String)org.apache.spark.sql.DataFrame cannot be applied to (List[String]) val df_list = map(x = > (spark.read.parquet(x)), paths)

任何解决问题的建议都将不胜感激。

试试这个:

val df_list = paths.map(x => spark.read.parquet(x))
val df = df_list.reduce(_.union(_))

问题是在 Scala 中 mapreduce 是集合方法。

这里的首选方法是使用 skip union 并直接使用可变参数加载数据:

spark.read.parquet(paths: _*)