【问题标题】:How can I create one DataFrame from multiple files with different format in Spark?如何在 Spark 中从多个不同格式的文件创建一个 DataFrame?
【发布时间】:2021-08-14 05:23:09
【问题描述】:
我知道我可以使用 spark.read.csv() 或 spark.read.json() 将 CSV 文件或 JSON 文件作为一个 DataFrame 加载,但如果我的源文件实际上是不同的格式,例如,我的一些原始数据在CSV 文件,但其他一些文件在 JSON 文件中?我是否可以创建一个包含来自我的 CSV 和 JSON 文件的数据的 DataFrame?
可能我应该单独加载它们并在 DataFrames 上使用 JOIN 操作,或者我应该首先将所有 JSON 数据转换为 CSV 并使用单个 spark.read.csv() 加载它们,但我想听听你的建议,因为我是新手到 Spark。
【问题讨论】:
标签:
apache-spark
apache-spark-sql
【解决方案1】:
可以通过读取不同的文件格式来创建一个数据帧,但您必须分别读取它们,然后对它们进行联合以创建最终的数据帧。
在执行此操作之前,您必须确定以下内容:
-
你在同一个文件夹或不同文件夹中有csv文件和json文件吗?如果它们在不同的文件夹中,您可以读取整个目录,如果它们在同一个文件夹中,您可以使用通配符方法读取它们以读取特定类型的所有文件。
spark.read.csv("*.csv")
spark.read.json("*.json")
-
您还必须确保通过读取 csv 文件和 json 文件生成的架构是相同的。如果架构不同,您可以对其执行一些转换并将它们带到相同的架构,以便您可以对其执行联合。
-
如果您对通过读取不同文件格式类型创建的两个数据帧进行联合,则需要确保两个数据帧中的列名和数据类型相同。如果两个数据框中的列顺序相同,则可以使用 union() 函数,如果不是,则使用 unionByName()。