让我们假设我有一个JSON文件,让我们将其命名为foo,其中包含以下内容: {" a":2," b":3}
我的目标是根据" a"来编写分区数据。列。
然后从我的代码中我做了这样的事情:
DataFrame df = sqlContext.read().json("foo");
df.write().mode(SaveMode.Append).partitionBy("a").json("output");
一切都很好,我在输出中得到以下结构:
output
|
|-->a=2
|-> part-blahblah
当我检查部分blahblah的内容然后" a"内容中缺少字段。
我的问题是,是否有任何方法可以控制此行为(通过选项或代码)以保留分区列(因此创建的文件将同时包含a和b而不是b)。原因是我想从其他不支持分区的应用程序加载数据,他们无法推断出分区方案。我想把字段a复制到" _a"并按" _a"分区但它不优雅而且会产生问题。
谢谢!
答案 0 :(得分:0)
您应该复制进行分区的列。
在PySpark中
from pyspark.sql import functions as F
df = df.withColumn("a_partition", F.col("a"))
df.write().mode(SaveMode.Append).partitionBy("a_partition").json("output");