Spark / Scala Flatten和FlatMap在DataFrame上不起作用

Spark/Scala flatten and flatMap is not working on 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

我也将其转换为列表,然后尝试展平,这也产生了相同的错误。
您是否知道如何解决?这里有什么问题吗?
谢谢亚历克斯


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

您正在寻找的代码是

1
parquetFiles.reduce(_ unionAll _)

可以通过DataFrame执行引擎对其进行优化。


因此,似乎您想将这三个DataFrames结合在一起,以使unionAll函数能够很好地工作。 您可以执行parquetFiles.reduce((x, y) => x.unionAll(y))(请注意,这将在一个空列表中爆炸,但是如果您可能只查看其中一个折叠而不是减小)。