用 Spark 處理復雜數據類型(Array、Map、JSON字符串等)


 
         
split 對列表進行切割,然后生產新的列表

from
pyspark.sql.functions import split
# 對 key列按照 0-9之間的數字進行風格 重新命名為 s
 df.select(split(df.key, '[0-9]+').alias('s'))
df1 = df.select(split(df.key, '[0-9]+').alias('s')) # 重新轉移變量給df1
 df1.withColumn("sd",df1["s"][0]).show() # 把 分割出來的s 提取出第[0]個重新成立新行

 

to_jso 把每一行全部轉為,然后生產新的列表
from pyspark.sql.functions import to_json,struct

將每一行轉化為json 並將行名,命名為wang df.select(to_json(struct([df["key"]])).alias("wang")).show()

 

  • withColumn(colName, col)
  • 通過為原數據框 添加一個新列替換已存在的同名列而返回一個新數據框。 colName 是一個字符串, 為新列的名字。
    col 為這個新列的 Column 表達式。 withColumn 的第一個參數必須是已存在的列的名字,  withColumn 的第二個參數必須是含有列的表達式。如果不是它會報錯 AssertionError: col should be Column
  • df.withColumn('page_count', df.page_count+100).select("app_key","page_count").take(2)
    [Row(app_key=u'2323423dsfds', page_count=110), Row(app_key=u'2323423dsfds', page_count=104)]
    df.withColumn('avg', df.page_count/df.duration).select("app_key","avg").take(2)
    [Row(app_key=u'2323423dsfds', avg=0.00012387736141220192), Row(app_key=u'2323423dsfds', avg=0.16666666666666666)]


    作者:焉知非魚
    鏈接:https://www.jianshu.com/p/604f5fd39ba6
    來源:簡書
    著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM