【发布时间】:2015-11-05 07:33:57
【问题描述】:
我有一个如下类型的 JavaPairRDD:
Tuple2<String, Iterable<Tuple2<String, Iterable<Tuple2<String, String>>>>>
表示以下对象:
(Table_name, Iterable(Tuple_ID, Iterable(Column_name, Column_value)))
这意味着 RDD 中的每条记录都会创建一个 Parquet 文件。
正如您可能已经猜到的那样,这个想法是将每个对象保存为一个名为 Table_name 的新 Parquet 表。在这张表中,有一列名为ID,存储了值Tuple_ID,每一列Column_name存储了值Column_value em>。
我面临的挑战是表的列(架构)是在运行时动态收集的,并且由于无法在 Spark 中创建嵌套 RDD,我无法在之前创建 RDD RDD(对于每条记录)并最终将其保存到 Parquet 文件中——当然是在将其转换为 DataFrame 之后。
而且我不能只将以前的 RDD 转换为 DataFrame,原因很明显(需要迭代以获取列/值)。
作为临时解决方法,我使用collect() 将 RDD 扁平化为与 RDD 相同类型的列表,但这不是正确的方法,因为数据可能大于驱动程序机器上的可用磁盘空间,导致内存不足。
关于如何实现这一目标的任何建议?如果问题不够清楚,请告诉我。
【问题讨论】:
标签: apache-spark apache-spark-sql parquet