【发布时间】:2020-05-06 22:35:12
【问题描述】:
我正在尝试在 PySpark 中读取 CSV,其中我的分隔符是“|”,但有些列有“\|”作为单元格中值的一部分。
CSV Data:
a|b|c|this should be \| one column
some_df = spark.read.csv(file, sep="|", quote="")
some_df.show()
输出:
+---+---+---+----------------+-----------+
|_c0|_c1|_c2| _c3| _c4|
+---+---+---+----------------+-----------+
| a | b | c |this should be \| one column|
+---+---+---+----------------+-----------+
预期:
+---+---+---+---------------------------+
|_c0|_c1|_c2| _c3|
+---+---+---+---------------------------+
| a | b | c |this should be \ one column|
+---+---+---+---------------------------+
【问题讨论】:
-
带有
|的值应该用双引号括起来以符合CSV,您是否可以控制输入数据格式? -
我无法控制输入数据。我有数千个像这样格式化的 CSV 文件。有问题的列总是有一个“\|”
-
您可以做一件事,读取为 RDD 并删除该字符并转换为 DataFram
-
@Nikk,我试过这个选项,但没有成功。这是我一直在尝试使用的代码:
myfile = sc.textFile("test.txt") myfile2 = myfile.map(lambda x: [re.sub("\\\|", "", x)]) myfile2.toDF().show()但是,这不会产生预期的输出,所有内容都被视为一列,并且不会合并第三和第四列。我希望正则表达式删除“\|”但它没有 -
在正则表达式前面贴上
r,这样re.sub(r"\\\|", "", x)...应该更好...
标签: apache-spark pyspark pyspark-sql pyspark-dataframes