【发布时间】: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