溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Pyspark處理數(shù)據(jù)中帶有列分隔符的數(shù)據(jù)集

發(fā)布時間:2021-12-17 09:31:01 來源:億速云 閱讀:192 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了Pyspark處理數(shù)據(jù)中帶有列分隔符的數(shù)據(jù)集,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

下面主要內(nèi)容是處理在數(shù)據(jù)集中存在列分隔符或分隔符的特殊場景。對于Pyspark開發(fā)人員來說,處理這種類型的數(shù)據(jù)集有時是一件令人頭疼的事情,但無論如何都必須處理它。

數(shù)據(jù)集基本上如下所示:

 #first line is the headerNAME|AGE|DEP
 Vivek|Chaudhary|32|BSC
 John|Morgan|30|BE
 Ashwin|Rao|30|BE

數(shù)據(jù)集包含三個列" Name ", " AGE ", " DEP ",用分隔符" | "分隔。如果我們關(guān)注數(shù)據(jù)集,它也包含' | '列名。

讓我們看看如何進行下一步:

步驟1。使用spark的Read .csv()方法讀取數(shù)據(jù)集:

 #create spark session 
 import pyspark
 from pyspark.sql import SparkSession
 spark=SparkSession.builder.appName(‘delimit’).getOrCreate()

上面的命令幫助我們連接到spark環(huán)境,并讓我們使用spark.read.csv()讀取數(shù)據(jù)集

 #create 
 df=spark.read.option(‘delimiter’,’|’).csv(r’<path>/delimit_data.txt’,inferSchema=True,header=True)
 df.show()

Pyspark處理數(shù)據(jù)中帶有列分隔符的數(shù)據(jù)集

從文件中讀取數(shù)據(jù)并將數(shù)據(jù)放入內(nèi)存后我們發(fā)現(xiàn),最后一列數(shù)據(jù)在哪里,列年齡必須有一個整數(shù)數(shù)據(jù)類型,但是我們看到了一些其他的東西。這不是我們所期望的。一團糟,完全不匹配,不是嗎?答案是肯定的,確實一團糟。

現(xiàn)在,讓我們來學(xué)習(xí)如何解決這個問題。

步驟2。再次讀取數(shù)據(jù),但這次使用Read .text()方法:

 df=spark.read.text(r’/Python_Pyspark_Corp_Training/delimit_data.txt’)
 df.show(truncate=0)

Pyspark處理數(shù)據(jù)中帶有列分隔符的數(shù)據(jù)集

 #extract first row as this is our header
 head=df.first()[0]
 schema=[‘fname’,’lname’,’age’,’dep’]
 print(schema)
 Output: ['fname', 'lname', 'age', 'dep']

下一步是根據(jù)列分隔符對數(shù)據(jù)集進行分割:

 #filter the header, separate the columns and apply the schema
 df_new=df.filter(df[‘value’]!=head).rdd.map(lambda x:x[0].split(‘|’)).toDF(schema)
 df_new.show()

Pyspark處理數(shù)據(jù)中帶有列分隔符的數(shù)據(jù)集

現(xiàn)在,我們已經(jīng)成功分離出列。

我們已經(jīng)成功地將“|”分隔的列(“name”)數(shù)據(jù)分成兩列?,F(xiàn)在,數(shù)據(jù)更加干凈,可以輕松地使用。

接下來,連接列“fname”和“l(fā)name”:

 from pyspark.sql.functions import concat, col, lit
 df1=df_new.withColumn(‘fullname’,concat(col(‘fname’),lit(“|”),col(‘lname’)))
 df1.show()

Pyspark處理數(shù)據(jù)中帶有列分隔符的數(shù)據(jù)集

要驗證數(shù)據(jù)轉(zhuǎn)換,我們將把轉(zhuǎn)換后的數(shù)據(jù)集寫入CSV文件,然后使用read. CSV()方法讀取它。

 df1.write.option(‘sep’,’|’).mode(‘overwrite’).option(‘header’,’true’).csv(r’<file_path>\cust_sep.csv’)

下一步是數(shù)據(jù)驗證:

 df=spark.read.option(‘delimiter’,’|’).csv(r<filepath>,inferSchema=True,header=True)
 df.show()

Pyspark處理數(shù)據(jù)中帶有列分隔符的數(shù)據(jù)集

現(xiàn)在的數(shù)據(jù)看起來像我們想要的那樣。

上述內(nèi)容就是Pyspark處理數(shù)據(jù)中帶有列分隔符的數(shù)據(jù)集,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI