【问题标题】:Write Parquet files from Spark RDD to dynamic folders将 Parquet 文件从 Spark RDD 写入动态文件夹
【发布时间】:2016-02-08 07:58:49
【问题描述】:

鉴于以下 sn-p(Spark 版本:1.5.2):

rdd.toDF().write.mode(SaveMode.Append).parquet(pathToStorage)

将 RDD 数据保存到扁平 Parquet 文件中,我希望我的存储具有如下结构:

country/
    year/
        yearmonth/
            yearmonthday/

数据本身包含一个国家列和一个时间戳,所以我从this method 开始。但是,由于我的数据中只有一个时间戳,因此我无法按年/年月/年月日对整个事物进行分区,因为它们本身并不是列...

this solution 看起来还不错,只是我无法使其适应 Parquet 文件...

有什么想法吗?

【问题讨论】:

    标签: scala apache-spark rdd parquet


    【解决方案1】:

    我想通了。为了使路径动态链接到 RDD,首先必须从 rdd 创建一个元组:

    rdd.map(model => (model.country, model))
    

    然后,所有记录都必须被解析,以检索不同的国家:

    val countries = rdd.map {
            case (country, model) => country
        }
        .distinct()
        .collect()
    

    既然知道了国家,就可以根据不同的国家来写记录:

    countries.map {
        country => {
            val countryRDD = rdd.filter {
                    case (c, model) => c == country
                }
                .map(_._2)
            countryRDD.toDF().write.parquet(pathToStorage + "/" + country)
        }
    } 
    

    当然,整个集合必须解析两次,但这是我目前找到的唯一解决方案。

    关于时间戳,您只需要使用 3 元组执行相同的过程(第三个类似于 20160214);我最终选择了当前时间戳。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2019-05-07
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多