根据列值对数据进行分区

时间:2015-11-03 08:46:04

标签: hadoop apache-spark hive apache-pig partitioning

您好我有以下数据源

ID       Date            Page

100      27-10-2015     google
102      27-10-2015     facebook
102      27-10-2015     instagram
104      28-10-2015     yahoo
105      30-10-2015     bing

我想将这些数据存储为镶木地板格式,格式如下所示

/foldername/columname=value/data.parquet

例如

/output/ID=102/data.parquet
/output/ID=104/data.parquet

这里data.parquet包含木地板格式的列ID = 102的值。

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

使用DataFrames,您的代码应如下所示:

val df = yourData
df.write.partitionBy(['ID']).format("parquet").save(dest, mode="append")

答案 1 :(得分:0)

假设您的数据来源是表:t1
以下SQL将为您创建所需的表:

SET hive.exec.dynamic.partition.mode=nonstrict;

CREATE TABLE T1_PRQT (date string,page string) 
PARTITIONED BY (id int)
STORED AS parquet
LOCATION '/output';

INSERT OVERWRITE TABLE T1_PRQT PARTITION(id) 
SELECT date,page,id FROM T1;

第一行可以在插入时创建动态分区 当date,page,id是分区列,文件格式为id且存储在parquet时,Create SQL会创建一个包含字段/output的表。 Insert SQL将前一个表t1中的数据加载到新表中。

相关问题