#python-3.x #apache-spark #pyspark
#python-3.x #apache-spark #pyspark
Вопрос:
У меня есть CSV-файл, в котором есть текстовые квалификаторы «» для текстовых полей. Файл также содержит несколько строк с возвратами каретки в некоторых полях. Я просмотрел другие сообщения stackoverflow и не смог найти ни одного, который мог бы помочь мне с проблемой, с которой я столкнулся. Данные выглядят следующим образом
файл здесь: dropbox.com/sh/nqmhdckae628ntc/AAAK7lU6wJcWkPTv5y3ZWyhRa?dl=0
"Project ID","Initiative Name",Status,Type,Submitter,"Submitted Date",CEP,Maverick,Toolbox,"External Labour",Mamp;A,"Embedded in Plan","Start Date","End Date",Category,"TS Prime","VP Reporting Group","Benefiting BU","Vendor Name","TS Finance Prime","TS Director Prime","TS VP Prime","Finance Approved","Delivery Model",Baseline,"WLS Allocation","WLN Allocation"
1234,"xyz",Incremental,"Budget Impacting Savings","Some VP","2019-10-31 14:54:14.670",FALSE,FALSE,FALSE,FALSE,FALSE,"Embedded in plan",2019-09-09,2020-09-08,"Information Technology","some vp",Procurement,"some info some info
some info
some info
some info","something","some vp","some vp","another vp",Yes,"whatever",1.68,1,1
123,"abc",Incremental,"Non-Budget Impact Savings","some vp","2020-01-22 15:48:57.323",FALSE,FALSE,FALSE,FALSE,FALSE,,2020-01-14,2020-05-31,"Information Technology","some vp",Procurement,"some info
some info
some info",something,"some vp","some vp","some vp",,"whatever",2,0,10
Здесь есть две записи «Идентификатор проекта» 1234 и 123. Когда я читаю этот файл в pandas, он выполняет свою работу:
df_test= pd.read_csv('data.csv',sep=",",quotechar='"')
вывод первой строки выглядит следующим образом:
Project ID 1234
Initiative Name xyz
Status Incremental
Type Budget Impacting Savings
Submitter Some VP
Submitted Date 2019-10-31 14:54:14.670
CEP False
Maverick False
Toolbox False
External Labour False
Mamp;A False
Embedded in Plan Embedded in plan
Start Date 2019-09-09
End Date 2020-09-08
Category Information Technology
TS Prime some vp
VP Reporting Group Procurement
Benefiting BU some info some infornsome infornsome info...
Vendor Name something
TS Finance Prime some vp
TS Director Prime some vp
TS VP Prime another vp
Finance Approved Yes
Delivery Model whatever
Baseline 1.68
WLS Allocation 1
WLN Allocation 1
Name: 0, dtype: objectenter code here
Мы видим, что / r / n в столбце вывода приносят пользу BU . Я хочу прочитать файл в spark с помощью pyspark. Файлы, с которыми мы имеем дело, в среднем составляют 4,5 ГБ. Pandas не может обрабатывать такие большие файлы, поэтому использует spark для загрузки и обработки файлов. Я попытался прочитать файл в pyspark, используя «option («Многострочный»,»true»)», но, похоже, это не работает. Это дает мне количество только одной записи, и это первая запись. Он не распознает вторую строку.
df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").option("quote",'"').option("escape","/"").option("multiLine","true").csv("data.csv")
df.show()
---------- --------------- ----------- -------------------- --------- -------------------- ----- -------- ------- --------------- ----- ---------------- ---------- ---------- -------------------- -------- ------------------ -------------------- ----------- ---------------- ----------------- ----------- ---------------- -------------- -------- -------------- --------------
|Project ID|Initiative Name| Status| Type|Submitter| Submitted Date| CEP|Maverick|Toolbox|External Labour| Mamp;A|Embedded in Plan|Start Date| End Date| Category|TS Prime|VP Reporting Group| Benefiting BU|Vendor Name|TS Finance Prime|TS Director Prime|TS VP Prime|Finance Approved|Delivery Model|Baseline|WLS Allocation|WLN Allocation|
---------- --------------- ----------- -------------------- --------- -------------------- ----- -------- ------- --------------- ----- ---------------- ---------- ---------- -------------------- -------- ------------------ -------------------- ----------- ---------------- ----------------- ----------- ---------------- -------------- -------- -------------- --------------
| 1234| xyz|Incremental|Budget Impacting ...| Some VP|2019-10-31 14:54:...|false| false| false| false|false|Embedded in plan|2019-09-09|2020-09-08|Information Techn...| some vp| Procurement|some info some in...| something| some vp| some vp| another vp| Yes| whatever| 1.68| 1| 1
123|
---------- --------------- ----------- -------------------- --------- -------------------- ----- -------- ------- --------------- ----- ---------------- ---------- ---------- -------------------- -------- ------------------ -------------------- ----------- ---------------- ----------------- ----------- ---------------- -------------- -------- -------------- --------------
Обратите внимание, как он берет первый элемент из второй строки, но не всю строку целиком, и обрабатывает его как часть первой строки. Когда я выполняю df.count(), это дает мне только 1, когда должно было дать мне 2, поскольку у меня есть 2 записи. Если я читаю csv без многострочной опции, он распознает каждую новую строку как строку, что справедливо, поскольку spark построен таким образом, но это не то, что я хочу.
Может кто-нибудь, пожалуйста, указать мне правильное направление. Буду действительно признателен за помощь.Я не знаю, смогу ли я загрузить тестовый файл, который я показал вам здесь, если кто-нибудь захочет воссоздать проблему.
Комментарии:
1. предоставьте свой образец data.csv.
2. @Lamanus как я могу загрузить сюда?
3. скопируйте и вставьте это в свой вопрос.
4. @Lamanus это есть в моем вопросе. Это первый блок кода. Вот как выглядят данные в файле.
5. @Lamanus внес небольшую правку в вставленные сюда данные. Теперь это должны быть те же данные, на которые я смотрю.
Ответ №1:
Ну, я не указывал quote
и escape
, но это работает.
df = spark.read.option("header","true").option("inferSchema","true").option("multiline","true").csv("test.csv")
df.count()
2
И
df.show(10, False)
---------- --------------- ----------- ------------------------- --------- ----------------------- ----- -------- ------- --------------- ----- ---------------- ---------- ---------- ---------------------- -------- ------------------ ------------------------------------------------- ----------- ---------------- ----------------- ----------- ---------------- -------------- -------- -------------- --------------
|Project ID|Initiative Name|Status |Type |Submitter|Submitted Date |CEP |Maverick|Toolbox|External Labour|Mamp;A |Embedded in Plan|Start Date|End Date |Category |TS Prime|VP Reporting Group|Benefiting BU |Vendor Name|TS Finance Prime|TS Director Prime|TS VP Prime|Finance Approved|Delivery Model|Baseline|WLS Allocation|WLN Allocation|
---------- --------------- ----------- ------------------------- --------- ----------------------- ----- -------- ------- --------------- ----- ---------------- ---------- ---------- ---------------------- -------- ------------------ ------------------------------------------------- ----------- ---------------- ----------------- ----------- ---------------- -------------- -------- -------------- --------------
|1234 |xyz |Incremental|Budget Impacting Savings |Some VP |2019-10-31 14:54:14.670|false|false |false |false |false|Embedded in plan|2019-09-09|2020-09-08|Information Technology|some vp |Procurement |some info some info
some info
some info
some info|something |some vp |some vp |another vp |Yes |whatever |1.68 |1 |1 |
|123 |abc |Incremental|Non-Budget Impact Savings|some vp |2020-01-22 15:48:57.323|false|false |false |false |false|null |2020-01-14|2020-05-31|Information Technology|some vp |Procurement |some info
some info
some info |something |some vp |some vp |some vp |null |whatever |2.0 |0 |10 |
---------- --------------- ----------- ------------------------- --------- ----------------------- ----- -------- ------- --------------- ----- ---------------- ---------- ---------- ---------------------- -------- ------------------ ------------------------------------------------- ----------- ---------------- ----------------- ----------- ---------------- -------------- -------- -------------- --------------
где таблица разбита, но вы увидите, что в ней две строки.
Комментарии:
1. Я все еще не решил свою проблему. Я делюсь файлом с вами через dropbox. Ссылка здесь dropbox.com/sh/nqmhdckae628ntc/AAAK7lU6wJcWkPTv5y3ZWyhRa?dl=0 Возможно, способ, которым вы скопировали это из вопроса, возможно, не создал проблему.
2. Используете ли вы ОС Windows? Я тестировал на образе Linux docker, но Windows выходит из строя, как и вы. хм…
3. Да в Windows 10 и spark версии 3.0.0
4. :(Много попыток и поисков, но не удалось найти ответ, извините. Это происходит только тогда, когда установлена операционная система Windows.
5. Я собираюсь принять ваш ответ, поскольку я попробовал это на виртуальной машине под управлением Linux, и это работает. Большое спасибо за вашу помощь.