让我们假设我有一个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”分区,但它不优雅而且会产生问题。
谢谢!
您应该复制要分区的列。
在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");