我有一个Pypark数据帧:
示例:
text <String> | name <String> | original_name <String>
----------------------------------------------------------------------------
HELLOWORLD2019THISISGOOGLE | WORLD2019 | WORLD_2019
----------------------------------------------------------------------------
NATUREISVERYGOODFORHEALTH | null | null
----------------------------------------------------------------------------
THESUNCONTAINVITAMIND | VITAMIND | VITAMIN_D
----------------------------------------------------------------------------
BECARETOOURHEALTHISVITAMIND | OURHEALTH | OUR_/HEALTH
----------------------------------------------------------------------------
我想循环name
列并查看name
值是否存在于text
中,如果存在,我创建一个new_column
,将包含在text
中找到的name
值的original_name
值。知道有时数据帧列是null
。你知道吗
示例:
在dataframe示例的第4行中,text
包含来自name
列的2个值:[OURHEALTH, VITAMIND]
,我应该获取它的original_name
值并将它们存储在new_column
。
在第2行中,text
包含来自name
列的OURHEALTH
,我应该在new_column
中存储找到的原始name
值==>;[OUR_/HEALTH]
预期结果:
text <String> | name <String> | original_name <String> | new_column <Array>
------------------------------|------------------|---------------------------|----------------------------
HELLOWORLD2019THISISGOOGLE | WORLD2019 | WORLD_2019 | [WORLD_2019]
------------------------------|------------------|---------------------------|----------------------------
NATUREISVERYGOODFOROURHEALTH | null | null | [OUR_/HEALTH]
------------------------------|------------------|---------------------------|----------------------------
THESUNCONTAINVITAMIND | VITAMIND | VITAMIN_D | [VITAMIN_D]
------------------------------|------------------|---------------------------|----------------------------
BECARETOOURHEALTHISVITAMIND | OURHEALTH | OUR_/HEALTH | [OUR_/HEALTH, VITAMIN_D ]
-----------------------------------------------------------------------------|----------------------------
我希望我的解释清楚。你知道吗
我按以下代码进行了尝试:
df = df.select("text", "name", "original_name").agg(collect_set("name").alias("name_array"))
for name_item in name_array:
df.withColumn("new_column", F.when(df.text.contains(name_item), "original_name").otherwise(None))
有人能帮我吗? 谢谢
一个简单的解决方案是在原始数据帧和只有
name
列的派生数据帧之间使用join
。由于多行可以满足连接条件,因此在连接之后必须按原始列分组。你知道吗下面是一个详细的输入示例:
输出:
相关问题 更多 >
编程相关推荐