SparkSQL数据帧保留了分区列

时间:2016-10-24 11:00:08

标签: apache-spark apache-spark-sql spark-dataframe

让我们假设我有一个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"分区但它不优雅而且会产生问题。

谢谢!

1 个答案:

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