如何将多个 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 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表?