我在文件夹中有许多csv文件要加载到spark数据框中。它们都有相同的标题或标题,它是最长标题的子集,但顺序不同。
"a","b","c"
"b","c","a"
"a","b"
我的架构有a,b,c
个字段。我正在尝试阅读
sqlcontext.read
.format("com.databricks.spark.csv")
.option("delimiter",",")
.option("header","true")
.load("file*.csv")
是否可以以相同或不同的顺序将多个具有相同标题或标题子集的csv文件读入spark数据框?而不是编辑文件来添加或更改列顺序,我想在spark中处理它。
答案 0 :(得分:0)
您需要为每种结构构建一个数据帧。 说
以编程方式读取每个文件的第一个标题,并根据类似的标题将其放在不同的目录中。
DF1 = sqlcontext.read.format("com.databricks.spark.csv").option("delimiter",",").option("header","true").load("DIRECTORY1/file*.csv")
DF2 = sqlcontext.read.format("com.databricks.spark.csv").option("delimiter",",").option("header","true").load("DIRECTORY2/file*.csv")
DF3 = sqlcontext.read.format("com.databricks.spark.csv").option("delimiter",",").option("header","true").load("DIRECTORY3/file*.csv")
....
最终数据框:
DF = DF1.select("a", "b","c").union.DF2.select("a","b","c").union.DF3.select("a","b","")
最终数据帧DF可用于进一步的程序逻辑。
答案 1 :(得分:0)
你可以试试 .option("mergeSchema", "true")。它对我有用。