парсинг файла csv с многострочными полями в pyspark - PullRequest
0 голосов
/ 20 ноября 2018

Возникла проблема при чтении файла test2.csv в pyspark.

Тестовый файл test1.csv

a1^b1^c1^d1^e1
a2^"this is having 
multiline data1
multiline data2"^c2^d2^e2
a3^b3^c3^d3^e3
a4^b4^c4^d4^e4

Тестовый файл test2.csv

a1^b1^c1^d1^e1
a2^this is having 
multiline data1
multiline data2^c2^d2^e2
a3^b3^c3^d3^e3
a4^b4^c4^d4^e4

Ниже приведен код

schema = StructType([
    StructField("A", StringType()),
    StructField("B", StringType()),
    StructField("C", StringType()),
    StructField("D", StringType()),    
    StructField("E", StringType())
])

Создание кадра данных для указанных выше двух файлов CSV.

df1=spark.read.csv("s3_path/test1.csv",schema=schema,inferSchema=True,multiLine=True,sep='^') df1.show(10,False) print ('df1.count() is: ', df1.count())

Below is the output when I read the test1.csv file
+---+-----------------------------------------------+---+---+---+
|A  |B                                              |C  |D  |E  |
+---+-----------------------------------------------+---+---+---+
|a1 |b1                                             |c1 |d1 |e1 |
|a2 |this is having 
multiline data1
multiline data2|c2 |d2 |e2 |
|a3 |b3                                             |c3 |d3 |e3 |
|a4 |b4                                             |c4 |d4 |e4 |
+---+-----------------------------------------------+---+---+---+

df1.count() is: 4



df2 = spark.read.csv("s3_path/test2.csv",schema=schema,inferSchema=True,multiLine=True,sep='^')
df2.show(10,False)
print ('df2.count() is: ', df2.count())


Below is the output when I read the test2.csv file
+---------------+---------------+----+----+----+
|A              |B              |C   |D   |E   |
+---------------+---------------+----+----+----+
|a1             |b1             |c1  |d1  |e1  |
|a2             |this is having |null|null|null|
|multiline data1|null           |null|null|null|
|multiline data2|c2             |d2  |e2  |null|
|a3             |b3             |c3  |d3  |e3  |
|a4             |b4             |c4  |d4  |e4  |
+---------------+---------------+----+----+----+

df2.count() is: 6

Исходные файлы: Если мы видим разницу висходные файлы.test1.csv имеет " в начале и в конце многострочных данных.Но test2.csv не имеет этого.

Описание проблемы: столбец B, 2-я строка содержит многострочные данные.Если мы видим вывод df2, он имеет 6 записей, здесь spark читает его как новую запись, которая not correct.Вывод df1 имеет 4 записи, многострочные данные в столбце B 2-й строки обрабатываются как одна строка: correct.

Вопрос: Может ли кто-нибудь помочь исправить код для чтения файла test2.csvа также правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...