gpt4 book ai didi

apache-spark - Spark : Read dat file with a special case

转载 作者:行者123 更新时间:2023-12-04 04:00:15 25 4
gpt4 key购买 nike

我有一个由 \u0001 分隔的 .dat 文件。应该是这样的

+---+---+---+
|A |B |C |
+---+---+---+
|1 |2,3|4 |
+---+---+---+
|5 |6 |7 |
+---+---+---+

但是我得到的文件有几行的字段之间有很多空格

A\u0001B\u0001C
1\u0001"2,3" \u00014
5\u00016\u00017

在上面的第二行中,两列之间有 79 个空格。现在,当我在 Spark 中读取文件时

val df = spark.read.format("csv").option("header", "true").option("delimiter", "\u0001").load("path")

df.show(false)

+---+-----------------------------------------------------------------------------------+----+
|A |B |C |
+---+-----------------------------------------------------------------------------------+----+
|1 |2,3 4|null|
+---+-----------------------------------------------------------------------------------+----+
|5 |6 |7 |
+---+-----------------------------------------------------------------------------------+----+

有没有办法在不更改输入文件的情况下解决这个问题?

最佳答案

尝试添加 .option("ignoreTrailingWhiteSpace", true)

来自documentation :

ignoreTrailingWhiteSpace (default false): a flag indicating whether ornot trailing whitespaces from values being read should be skipped.


编辑:您需要关闭报价以使其适用于您的示例:

val df2 = spark.read.format("csv")
.option("header", true)
.option("quote", "")
.option("delimiter", "\u0001")
.option("ignoreTrailingWhiteSpace", true)
.load("data2.txt")

结果:

df2.show()
+---+-----+---+
| A| B| C|
+---+-----+---+
| 1|"2,3"| 4|
| 5| 6| 7|
+---+-----+---+

要删除引号,您可以尝试(注意这将删除字符串中的引号):

import org.apache.spark.sql.functions.regexp_replace

df2.withColumn("B", regexp_replace(df2("B"), "\"", "")).show()
+---+---+---+
| A| B| C|
+---+---+---+
| 1|2,3| 4|
| 5| 6| 7|
+---+---+---+

关于apache-spark - Spark : Read dat file with a special case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63136798/

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