首页 > 解决方案 > 如何读取数据帧中的csv文件,标题中的不同分隔符为“”,其余行用“|”分隔

问题描述

csv 文件头用逗号分隔,其余行用另一个分隔符“|”分隔 .如何处理这种不同的分隔符场景?请指教 。

import org.apache.spark.sql.{DataFrame, SparkSession}
var df1: DataFrame = null
df1=spark.read.option("header", "true").option("delimiter", ",").option("inferSchema", "false")
          .option("ignoreLeadingWhiteSpace", "true") .option("ignoreTrailingWhiteSpace", "true")
.csv("/testing.csv")
df1.show(10)

此命令显示标题单独分隔。但所有数据都显示在第一列中,其余列显示为空值

标签: scaladataframeapache-sparkapache-spark-sql

解决方案


首先读取 csv 并拆分列,创建新的数据框。

df.show

+---------+----+-----+
|       Id|Date|Value|
+---------+----+-----+
|1|2020|30|null| null|
|1|2020|40|null| null|
|2|2020|50|null| null|
|2|2020|40|null| null|
+---------+----+-----+

val cols = df.columns
val index = 0 to cols.size - 1
val expr = index.map(i => col("array")(i))

df.withColumn("array", split($"Id", "\\|"))
  .select(expr: _*).toDF(cols: _*).show

+---+----+-----+
| Id|Date|Value|
+---+----+-----+
|  1|2020|   30|
|  1|2020|   40|
|  2|2020|   50|
|  2|2020|   40|
+---+----+-----+

推荐阅读