sparksqlDataframe保留分区列

n53p2ov0  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(357)

假设我有一个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复制到“\u a”并用“\u a”进行分区,但它并不优雅,而且会产生问题。
谢谢!

jv4diomz

jv4diomz1#

您应该复制分区所依据的列。
在Pypark

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");

相关问题