मेरे पास एक सीएसवी फ़ाइल है जिसमें टेक्स्ट फ़ील्ड के लिए टेक्स्ट क्वालिफायर "" है। फ़ाइल में कुछ क्षेत्रों में कैरिज रिटर्न के साथ कई लाइनें भी हैं। मैंने अन्य स्टैक ओवरफ्लो पोस्टों को देखा है और मुझे ऐसा कोई नहीं मिला जो मुझे जिस समस्या का सामना कर रहा है उससे मेरी मदद कर सके। डेटा इस तरह दिखता है

यहां फाइल करें: dropbox.com/sh/nqmhdckae628ntc/AAAK7lU6wJcWkPTv5y3ZWyhRa?dl=0

"Project ID","Initiative Name",Status,Type,Submitter,"Submitted Date",CEP,Maverick,Toolbox,"External Labour",M&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। जब मैं इस फाइल को पांडा में पढ़ता हूं तो यह काम करता है:

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
M&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 info\r\nsome info\r\nsome 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 देख सकते हैं। मैं pyspark का उपयोग करके चिंगारी में फ़ाइल पढ़ना चाहता हूँ। हम जिन फाइलों के साथ काम कर रहे हैं, वे औसतन 4.5GB की हैं। पांडा इतनी बड़ी फाइलों को संभाल नहीं सकते हैं इसलिए फाइलों को लोड और प्रोसेस करने के लिए स्पार्क का उपयोग करते हैं। मैंने "विकल्प ("मल्टीलाइन", "सच") का उपयोग करके फ़ाइल को pyspark में पढ़ने की कोशिश की, लेकिन यह काम नहीं कर रहा है। यह मुझे केवल एक रिकॉर्ड की गिनती देता है और वह पहला रिकॉर्ड है। यह दूसरी पंक्ति को नहीं पहचानता है।

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|  M&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 रिकॉर्ड हैं। अगर मैं मल्टीलाइन विकल्प के बिना सीएसवी पढ़ता हूं तो यह प्रत्येक नई पंक्ति को एक पंक्ति के रूप में पहचानता है जो उचित है क्योंकि स्पार्क इस तरह से बनाया गया है लेकिन यह वह नहीं है जो मैं चाहता हूं।

क्या कोई कृपया मुझे सही दिशा में अंकित कर सकता है। वास्तव में मदद की सराहना करेंगे। मुझे नहीं पता कि अगर कोई इस मुद्दे को फिर से बनाना चाहता है तो मैं परीक्षण फ़ाइल अपलोड कर सकता हूं जो मैंने आपको यहां दिखाया था।

0
Abhishek 19 अगस्त 2020, 02:49

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|M&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
Lamanus 19 अगस्त 2020, 03:53