场景:
我写的CSV数据类似
df.write.partitionBy("foo", "bar").csv("hdfs:///quux/bletch")
hdfs://quux/bletch/foo=baz/bar=moo
目录中的CSV文件都缺少foo
和bar
列。
如何重新读回这些专栏?请不要告诉我,我必须逐一读取每个目录,手动添加数据,然后做一个笨拙的union
...
答案 0 :(得分:1)
如果您以相同的方式读取CSV文件,Spark将为您创建这些列(除了您不必指定partitionBy
之外),在计算机上调用load()
也不是问题。目录。
此示例将完全满足您的要求:
spark.read.format("csv").load("hdfs://quux/bleetch")
其中spark
是SparkSession
。
答案 1 :(得分:0)
尝试分区发现。
通过将路径/目标/表传递到SparkSession.read.parquet或SparkSession.read.load,Spark SQL将自动从路径中提取分区信息。现在,返回的DataFrame的架构变为:
root
|-- name: string (nullable = true)
|-- age: long (nullable = true)
|-- gender: string (nullable = true)
|-- country: string (nullable = true)