Parquet 使用Spark(CSV,拼花地板)处理半不均匀的结构化文件
我在Hadoop集群中存储了几个不同结构的文件。这些文件包含标题行,但并非所有文件都包含相同的列 file1.csv:Parquet 使用Spark(CSV,拼花地板)处理半不均匀的结构化文件,parquet,spark-csv,Parquet,Spark Csv,我在Hadoop集群中存储了几个不同结构的文件。这些文件包含标题行,但并非所有文件都包含相同的列 file1.csv: a,b,c 1,2,1 file2.csv: a,b,d 2,2,2 我需要做的是查找a列或c列中的所有数据并进一步处理(可能是Spark SQL)。因此,我期望类似于: a,b,c,d 1,2,1,, 2,2,,2 正在做 spark.read.format("csv").option("header", "true").load(CSV_PATH) 将丢失“第一次”
a,b,c
1,2,1
file2.csv:
a,b,d
2,2,2
我需要做的是查找a列或c列中的所有数据并进一步处理(可能是Spark SQL)。因此,我期望类似于:
a,b,c,d
1,2,1,,
2,2,,2
正在做
spark.read.format("csv").option("header", "true").load(CSV_PATH)
将丢失“第一次”文件读取中不存在的所有列
我该怎么做?转换为拼花地板及其数据集功能是更好的方法吗?分别读取两个文件并创建两个数据帧。然后在这两个w.r.t连接键之间做一个内部连接,如a,b如果偶尔手动执行一次,这可能会起作用,但考虑到将有数百个(如果不是数千个)GB大小的文件,我正在寻找一种比在只查看b列之前手动连接所有内容更平滑的方法(坚持这个例子。我不是在说手动方法。这不取决于文件大小。Spark将为您处理问题,您只需要在Spark sql w.r.t连接键中编写查询。如果您想要获得所需的结果,您需要知道文件的模式。使用Scala或python或java在Spark中编写代码构建fat jar并将其部署到您的服务器。然后执行spark提交。甚至您也可以参数化您的文件路径。