我试图在pyspark dataframe中查找列中的所有字符串
输入df:
id val
1 "book bike car"
15 "car TV bike"
我需要一个输出df,比如:(word_index value是自动递增索引,“val_new”中的值顺序是随机的。)
val_new word_index
TV 1
car 2
bike 3
book 4
我的代码:
import pyspark.sql.functions as F
from pyspark.sql.types import ArrayType, StringType
import re
def my_f(col):
if not col:
return
s = ''
if isinstance(col, str):
s = re.sub('[^a-zA-Z0-9]+', ' ', col).split()
return s
my_udf = F.udf(my_f, ArrayType(StringType()))
df = spark.createDataFrame([(1, 'book bike car'), (18, 'car TV bike')], ['id', 'val'])
df = df.withColumn('val_new', my_udf(F.col('val')))
我已经将字符串转换为数组,但是如何从每一行提取单词,删除重复项,以及使用两个新列创建一个新的dataframe
我不想使用groupBy和aggregate,因为数据帧可能很大,我不需要“id”列和任何重复的“val”
谢谢
这对您来说是一个可行的解决方案-在构建函数中使用
spark
而不是使用udf,这最终会使您的应用程序变慢。功能explode()
groupBy()
与collect_set()
将帮助您实现所需的结果在这里创建DF
这里的逻辑
最终产量
相关问题 更多 >
编程相关推荐