簡體   English   中英

將分隔列拆分為 pyspark dataframe 中的新列

[英]split delimited column into new columns in pyspark dataframe

需要將分隔(〜)列值動態拆分為新列。 輸入 sa dataframe 和列名列表。 我們正在嘗試使用 spark datfaram 函數來解決。 請幫忙。

Input:

|Raw_column_name|
|1~Ram~1000~US|
|2~john~2000~UK|
|3~Marry~7000~IND|

col_names=[id,names,sal,country]

output:
id | names | sal | country
1 | Ram | 1000 | US
2 | joh n| 2000 | UK
3 | Marry | 7000 | IND 

我們可以使用split()然后使用結果數組的元素來創建列。

data_sdf. \
    withColumn('raw_col_split_arr', func.split('raw_column_name', '~')). \
    select(func.col('raw_col_split_arr').getItem(0).alias('id'),
           func.col('raw_col_split_arr').getItem(1).alias('name'),
           func.col('raw_col_split_arr').getItem(2).alias('sal'),
           func.col('raw_col_split_arr').getItem(3).alias('country')
           ). \
    show()

# +---+-----+----+-------+
# | id| name| sal|country|
# +---+-----+----+-------+
# |  1|  Ram|1000|     US|
# |  2| john|2000|     UK|
# |  3|Marry|7000|    IND|
# +---+-----+----+-------+

如果用例擴展為列的動態列表。

col_names = ['id', 'names', 'sal', 'country']

data_sdf. \
    withColumn('raw_col_split_arr', func.split('raw_column_name', '~')). \
    select(*[func.col('raw_col_split_arr').getItem(i).alias(k) for i, k in enumerate(col_names)]). \
    show()

# +---+-----+----+-------+
# | id|names| sal|country|
# +---+-----+----+-------+
# |  1|  Ram|1000|     US|
# |  2| john|2000|     UK|
# |  3|Marry|7000|    IND|
# +---+-----+----+-------+

另一個選項是 from_csv() function。 唯一需要定義的是模式:

from pyspark.sql.functions import from_csv, col

df = spark.createDataFrame([('1~Ram~1000~US',), ('2~john~2000~UK',), ('3~Marry~7000~IND',)], ["Raw_column_name"])
df.show()

schema = "id int, names string, sal string, country string"
options = {'sep': '~'}
df2 = (df
       .select(from_csv(col('Raw_column_name'), schema, options).alias('cols'))
       .select(col('cols.*'))
       )
df2.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM