SparkSQL数据帧保留了分区列

问题描述 投票:1回答:1

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

谢谢!

apache-spark apache-spark-sql spark-dataframe
1个回答
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");
© www.soinside.com 2019 - 2024. All rights reserved.