【问题标题】:Spark write to parquet based on alphabetical partitioningSpark 基于字母分区写入镶木地板
【发布时间】:2018-10-27 22:33:37
【问题描述】:

我对这个话题做了很多研究。我有一个 3 tb 大小的数据集。 以下是该表的数据架构:

root
 |-- user: string (nullable = true)
 |-- attributes: array (nullable = true)
 |    |-- element: string (containsNull = true)

每天,我都会得到一份我需要属性的用户列表。我想知道我是否可以将上述模式写入包含前 2 个用户字母的镶木地板文件。例如,

Omkar | [a,b,c,d,e]
Mac   | [a,b,c,d,e]
Zee   | [a,b,c,d,e]
Kim   | [a,b,c,d,e]
Kelly | [a,b,c,d,e]

在上面的数据集上,我可以做这样的事情吗:

spark.write.mode("overwrite").partitionBy("user".substr(0,2)).parquet("path/to/location")

这样做,我觉得下次加入用户时加载到内存中的数据会非常少,因为我们只能打那些分区。

如果有人实现了这样的任何 cmets?

谢谢!!

【问题讨论】:

  • 是的,这应该可以,但是如果您加载数据,您还需要在过滤器/连接条件中包含"user".substr(0,2),否则分区修剪将不起作用。 Spark 无法知道用户Omkar 在分区Om

标签: apache-spark hadoop parquet


【解决方案1】:

你可以。只需将您的代码替换为:

df
  .withColumn("prefix", $"user".substr(0,2)) // Add prefix column
  .write.mode("overwrite")            
  .partitionBy("prefix")                     // Use it for partitioning 
  .parquet("path/to/location")

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 2016-07-07
    • 1970-01-01
    • 2020-04-30
    • 2017-11-10
    • 1970-01-01
    • 2019-06-02
    • 2017-11-11
    • 2018-12-23
    相关资源
    最近更新 更多