Spark / Scala flatten和flatMap无法在DataFrame上运行

时间:2015-10-30 08:15:31

标签: scala apache-spark

我有一个包含三个相同类型的DataFrame的DataFrame(相同的镶木地板架构)。它们只包含它们包含的内容/值:

nested structure

我想展平结构,以便将三个DataFrame合并到一个包含所有内容/值的Parquet DataFrame中。

我尝试使用flatten和flatMap,但是我总是得到错误:

Error: No implicit view available from org.apache.spark.sql.DataFrame => Traversable[U].parquetsFiles.flatten Error: not enough arguments for method flatten: (implicit as Trav: org.apache.spark.sql.DataFrame => Traversable[U], implicit m: scala.reflect.ClassTag[U]. Unspecified value parameters asTrav, m. parquetFiles.flatten

我还将它转换为List然后尝试展平,这也产生了同样的错误。 你知道如何解决它或者这里有什么问题吗? 谢谢,Alex

2 个答案:

答案 0 :(得分:3)

scala编译器正在寻找一种将DataFrame转换为Traversable的方法,以便它可以应用flatten。但DataFrame不是Traversable,因此会失败。此外,没有ClassTag可用,因为DataFrame不是静态类型。

您正在寻找的代码是

parquetFiles.reduce(_ unionAll _)

可以由DataFrame执行引擎优化。

答案 1 :(得分:2)

因此,您似乎希望将这三个DataFrames加在一起,为此,unionAll函数可以正常运行。你可以做parquetFiles.reduce((x, y) => x.unionAll(y))(注意这会在空列表中爆炸,但如果你可能只看一个折叠而不是减少)。