如何将多个 csv 文件合并为单个 csv 文件

Posted

技术标签:

【中文标题】如何将多个 csv 文件合并为单个 csv 文件【英文标题】:How to union multiple csv files in to single csv file 【发布时间】:2018-01-12 07:00:00 【问题描述】:

我正在编写以下代码来转换多个 CSV 文件的联合并将组合数据写入新文件。但我遇到了一个错误。

val filesData=List("file1", "file2")
val dataframes = filesData.map(spark.read.option("header", true).csv(_))

val combined = dataframes.reduce(_ union _)
val data = combined.rdd

val head :Array[String]= data.first()

val memberDataRDD = data.filter(_(0) != head(0))

类型不匹配;找到:org.apache.spark.sql.Row 需要:Array[String]

【问题讨论】:

head 不会是 Array[String]combined.rdd 将返回 RDD[Row] 类型的 RDD,如错误消息中所述。 ***.com/questions/37639956/… 错误信息是否清晰?数据框是行的 RDD -> RDD[Row],如果需要,您必须从 Row 对象中获取字符串值。 【参考方案1】:

只要两个 csv df 具有相同的架构,就不会有任何问题

val df = spark.read.option("header", "true").csv("C:\maheswara\learning\big data\spark\sample_data\tmp") val df1 = spark.read.option("header", "true").csv("C:\maheswara\learning\big data\spark\sample_data\tmp1")

val dfs = List(df, df1) val dfUnion = dfs.reduce(_ union _)

【讨论】:

【参考方案2】:

您可以直接使用 Spark 读取多个路径:

spark.read.option("header", true).csv(filesData:_*)

【讨论】:

是的,但这与 OP 遇到的实际问题无关。 @Jasper-M - 怎么样? OP 想用 spark 读取多个 csv 文件。以上是解决方法。这就是 SO 要求用户提供代码和详细信息的原因。另请阅读 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem 没错!他询问是否阅读多个 CSV 文件,但他提供的代码和错误表明他的实际问题是其他问题。 @Jasper-M - 没有。 OP 正试图通过为每个文件创建一个 df 来做到这一点,并坚持进行联合。第一部分创建多个dfs本身不需要,所以不会出现问题。当多个 dfs 确实存在以满足有效需求时,如何合并多个 dfs 的问题可能是另一个问题。

以上是关于如何将多个 csv 文件合并为单个 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

将具有不同架构(列)的多个文件 (.csv) 合并/合并为单个文件 .csv - Azure 数据工厂

如何将多个 csv 文件合并为一个 csv 文件

我的批处理文件应该有啥代码将多个 CSV 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表?

如何将多个csv按行合并?(不是首尾相接的按列合并)

使用逗号分隔符将单个 CSV 列批量转换为多个

如何使用 Python Pandas 合并多个 CSV 文件