我有以下火花資料框。
Column_1
Physics=99;name=Xxxx;age=15
Physics=97;chemistry=85;name=yyyy;age=14
Physics=97;chemistry=85;maths=65;name=zzzz;age=14
我必須將上面的資料框列拆分為多列,如下所示。
column_1 name age
Physics=99 Xxxx 15
Physics=97;chemistry=85 yyyy 14
Physics=97;chemistry=85;maths=65 zzzz 14
我嘗試使用分隔符拆分;和限制。但它也將主題分成不同的列。姓名和年齡被拼湊成一欄。我要求在一列中包含所有主題,在單獨的列中只需要姓名和年齡。
是否有可能在 Pyspark 中實作這一點。
uj5u.com熱心網友回復:
您可以使用替換技巧來拆分列。
df = spark.createDataFrame([('Physics=99;name=Xxxx;age=15'),('Physics=97;chemistry=85;name=yyyy;age=14'),('Physics=97;chemistry=85;maths=65;name=zzzz;age=14')], 'string').toDF('c1')
df.withColumn('c1', f.regexp_replace('c1', ';name', ',name')) \
.withColumn('c1', f.regexp_replace('c1', ';age', ',age')) \
.withColumn('c1', f.split('c1', ',')) \
.select(
f.col('c1')[0].alias('stat'),
f.col('c1')[1].alias('name'),
f.col('c1')[2].alias('age')) \
.show(truncate=False)
-------------------------------- --------- ------
|stat |name |age |
-------------------------------- --------- ------
|Physics=99 |name=Xxxx|age=15|
|Physics=97;chemistry=85 |name=yyyy|age=14|
|Physics=97;chemistry=85;maths=65|name=zzzz|age=14|
-------------------------------- --------- ------
uj5u.com熱心網友回復:
您可以這樣做以使用正則運算式提取名稱:
import pyspark.sql.functions as F
df = spark.createDataFrame([("Physics=99;name=Xxxx;age=15",), ("Physics=97;chemistry=85;name=yyyy;age=14",),("Physics=97;chemistry=85;maths=65;name=zzzz;age=14",)], ["Column1"])
new_df = df.withColumn("name", F.regexp_extract('Column1', r'name=(\w )', 1).alias('name'))
new_df.show()
輸出:
-------------------- ----
| Column1|name|
-------------------- ----
|Physics=99;name=X...|Xxxx|
|Physics=97;chemis...|yyyy|
|Physics=97;chemis...|zzzz|
-------------------- ----
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/365954.html
