【问题标题】:Spark - Saving data to Parquet file in case of dynamic schemaSpark - 在动态模式的情况下将数据保存到 Parquet 文件
【发布时间】: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


    【解决方案1】:

    看看这个[问题][1]的答案

    [1]:Writing RDD partitions to individual parquet files in its own directory。我使用这个答案为每个分区创建单独的(一个或多个)镶木地板文件。这种技术我相信您可以根据需要使用相同的方法来创建具有不同架构的单独文件。

    【讨论】:

      猜你喜欢
      • 2015-10-28
      • 2019-01-24
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2022-10-08
      • 1970-01-01
      相关资源
      最近更新 更多