scala - 如何读取数据帧中的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)
此命令显示标题单独分隔。但所有数据都显示在第一列中,其余列显示为空值
解决方案
首先读取 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|
+---+----+-----+
推荐阅读
- javascript - iOS 手机没有显示我网站上的一些图片
- json - 将嵌套的 JSON 对象转换为 pandas 数据框
- c# - 如何从 C# 代码轮换 Azure 存储帐户访问密钥?
- docker - docker ERROR 分段错误(核心转储)中的 OWFS
- laravel - 根据 Laravel 中的另一个字段设置字段的最小值
- nearprotocol - 我在哪里可以设置 NFT 的价格?
- argo-workflows - Argo Workflow - 在步骤之间共享机器
- c - C:通过 OpenSSL 的 POP3 STLS
- asp.net - 我不知道为什么浏览器给我 404 错误
- php - .htaccess 使用多个 PHP 常量设置 error_reporting