我有一个包含三个相同类型的DataFrame的DataFrame(相同的镶木地板架构)。它们只包含它们包含的内容/值:
我想展平结构,以便将三个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
答案 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))
(注意这会在空列表中爆炸,但如果你可能只看一个折叠而不是减少)。