Spark/Scala flatten and flatMap is not working on 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
我也将其转换为列表,然后尝试展平,这也产生了相同的错误。
您是否知道如何解决?这里有什么问题吗?
谢谢亚历克斯
-
您可以将图像以文本形式发布吗? 这样,其他人就可以找到您的答案了。
-
当然,文本复制在IDE中不起作用,所以我手动复制了它
Scala编译器正在寻找一种将DataFrame转换为Traversable的方法,以便它可以应用flatten。 但是DataFrame不是Traversable,因此它将失败。 另外,由于没有静态键入DataFrame,因此没有可用的ClassTag。
您正在寻找的代码是
1
| parquetFiles.reduce(_ unionAll _) |
可以通过DataFrame执行引擎对其进行优化。
-
非常感谢Reactormonk,一切正常。 只是一个补充:对我而言,编码必须是这样的:arquetFiles.reduce(_ unionAll(_))。 谢谢!
因此,似乎您想将这三个DataFrames结合在一起,以使unionAll函数能够很好地工作。 您可以执行parquetFiles.reduce((x, y) => x.unionAll(y))(请注意,这将在一个空列表中爆炸,但是如果您可能只查看其中一个折叠而不是减小)。
-
非常感谢Holden! 那也很好,正是我所寻找的。 也像您使用火花测试基础的工作一样。 保持! :) 谢谢
-
非常感谢您的客气话,我非常高兴spark-testing-base为您解决了这个问题:)(P.S.如果您有任何功能要求,请创建github问题,我将尝试尝试一下:))