Apache spark SparkSQL数据帧保留分区列

Apache spark SparkSQL数据帧保留分区列,apache-spark,apache-spark-sql,spark-dataframe,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-b

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


谢谢

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

在Pypark

从pyspark.sql导入函数为F
df=df.withColumn(“a_分区”,F.col(“a”))
df.write().mode(SaveMode.Append).partitionBy(“a_partition”).json(“output”);

“原因是我想从其他没有分区意识的应用程序加载数据,它们无法推断分区方案”,但其他应用程序可以从目录结构/名称推断分区方案?我不认为有其他方法(除了用另一个名字复制你的专栏)不幸的是,它不能。在某些情况下,我递归加载目录并加载对象,因此目录结构不存在。