PySpark экранирует backsla sh и разделитель при чтении csv - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь прочитать CSV в PySpark, где моим разделителем является «|», но есть некоторые столбцы, которые имеют «\ |» как часть значения в ячейке.

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|
+---+---+---+---------------------------+

1 Ответ

0 голосов
/ 22 января 2020
>>> rdd  = sc.textFile("/.../file.csv")
>>> rdd.collect()
['a|b|c|this should be \\| one column']

>>> rdd1  = rdd.map(lambda x: x.replace("\\|", ""))
>>> rdd1.collect()
['a|b|c|this should be  one column']

>>> df = rdd1.map(lambda x: (x.split("|"))).map(lambda a : (a[0],a[1],a[2],a[3])).toDF(('col1', 'col2', 'col3', 'col4'))
>>> df.show(10,False)
+----+----+----+--------------------------+
|col1|col2|col3|col4                      |
+----+----+----+--------------------------+
|a   |b   |c   |this should be  one column|
+----+----+----+--------------------------+
...