gpt4 book ai didi

scala - 当最后一列名称包含空格时,Spark 无法读取 CSV

转载 作者:行者123 更新时间:2023-12-04 12:45:16 30 4
gpt4 key购买 nike

我有一个看起来像这样的 CSV:

+-----------------+-----------------+-----------------+
| Column One | Column Two | Column Three |
+-----------------+-----------------+-----------------+
| This is a value | This is a value | This is a value |
+-----------------+-----------------+-----------------+
| This is a value | This is a value | This is a value |
+-----------------+-----------------+-----------------+
| This is a value | This is a value | This is a value |
+-----------------+-----------------+-----------------+

在纯文本中,它实际上是这样的:
Column One,Column Two,Column Three
This is a value,This is a value,This is a value
This is a value,This is a value,This is a value
This is a value,This is a value,This is a value

我的 spark.read方法如下所示:
val df = spark.read
.format("csv")
.schema(schema)
.option("quote", "\"")
.option("escape", "\"")
.option("header", "true")
.option("multiLine", "true")
.option("mode", "DROPMALFORMED")
.load(inputFilePath)

multiLine设置为 true , df加载为空。当 multiLine 时它加载良好设置为 false ,但我需要 multiLine设置为 true .

如果我更改名称 Column ThreeColumnThree ,并更新 schema对象,然后它工作正常。好像 multiLine正在应用于标题行!我希望在 header 时不会出现这种情况也设置为 true .

任何想法如何解决这个问题?我应该使用 univocity解析器而不是默认 commons ?

更新:

我不知道为什么模拟数据工作正常。这是数据的更接近表示:

CSV(只有 1 个标题和 1 行数据...):
Digital ISBN,Print ISBN,Title,Price,File Name,Description,Book Cover File Name
97803453308,test,This is English,29.99,qwe_1.txt,test,test

架构和 spark.read方法:
val df = spark.read
.format("csv")
.schema(StructType(Array(
StructField("Digital ISBN", StringType, true),
StructField("Print ISBN", StringType, true),
StructField("Title", StringType, true),
StructField("File Name", StringType, true),
StructField("Price", StringType, true),
StructField("Description", StringType, true),
StructField("Book Cover File Name", StringType, true)
)))
.option("quote", "\"")
.option("escape", "\"")
.option("header", "true")
.option("multiLine", "true")
.option("mode", "DROPMALFORMED")
.load(inputFilePath)
df.show()结果 spark-shell :
+------------+----------+-----+---------+-----+-----------+--------------------+
|Digital ISBN|Print ISBN|Title|File Name|Price|Description|Book Cover File Name|
+------------+----------+-----+---------+-----+-----------+--------------------+
+------------+----------+-----+---------+-----+-----------+--------------------+

UDPATE 2:

我想我发现了“有什么不同”。当我复制 CSV 中的数据并将其保存到另一个 CSV 时,它工作正常。但是那个原始的 CSV(由 Excel 保存)失败了...... Excel 保存的 CSV 是 1290 字节,而我自己创建的 CSV(工作正常)是 1292 字节......

更新 3:

我在 vim中打开了Update2中提到的两个文件并注意到Excel保存的CSV有 ^M而不是新行。在此之前我的所有测试都有缺陷,因为它总是比较最初由 Excel 保存的 CSV 与从 Sublime 创建的 CSV……Sublime 没有显示差异。我确定我可以安装一个设置或包来查看它,因为我使用 Sublime 作为我的首选一次性文件编辑器......

不确定我是否应该关闭这个问题,因为标题具有误导性。再说一次,外面的人必须有一些值(value),哈哈...

最佳答案

我在将 multiLine 选项应用于标题时遇到了同样的问题。我通过添加忽略尾随空白的附加选项来解决它。

  .option("header", true)
.option("multiLine", true)
.option("ignoreTrailingWhiteSpace", true)

关于scala - 当最后一列名称包含空格时,Spark 无法读取 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50477857/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com