gpt4 book ai didi

python - 在 PySpark 中将 StringType 转换为 ArrayType

转载 作者:行者123 更新时间:2023-11-28 21:37:21 26 4
gpt4 key购买 nike

我正在尝试在我的数据集上运行 PySpark 中的 FPGrowth 算法。

from pyspark.ml.fpm import FPGrowth

fpGrowth = FPGrowth(itemsCol="name", minSupport=0.5,minConfidence=0.6)
model = fpGrowth.fit(df)

我收到以下错误:

An error occurred while calling o2139.fit.
: java.lang.IllegalArgumentException: requirement failed: The input
column must be ArrayType, but got StringType.
at scala.Predef$.require(Predef.scala:224)

我的数据框 df 的形式为:

df.show(2)

+---+---------+--------------------+
| id| name| actor|
+---+---------+--------------------+
| 0|['ab,df']| tom|
| 1|['rs,ce']| brad|
+---+---------+--------------------+
only showing top 2 rows

如果“名称”列中的数据采用以下形式,则 FP 算法将起作用:

 name
[ab,df]
[rs,ce]

如何以这种从 StringType 转换为 ArrayType 的形式获取它

我从 RDD 中形成了 Dataframe:

rd2=rd.map(lambda x: (x[1], x[0][0] , [x[0][1]]))

rd3 = rd2.map(lambda p:Row(id=int(p[0]),name=str(p[2]),actor=str(p[1])))
df = spark.createDataFrame(rd3)

rd2.take(2):

[(0, 'tom', ['ab,df']), (1, 'brad', ['rs,ce'])]

最佳答案

用逗号分隔数据帧的 name 列中的每一行。 例如

from pyspark.sql.functions import pandas_udf, PandasUDFType

@pandas_udf('list', PandasUDFType.SCALAR)
def split_comma(v):
return v[1:-1].split(',')

df.withColumn('name', split_comma(df.name))

或者更好的是,不要推迟这个。直接将名称设置到列表中。

rd2 = rd.map(lambda x: (x[1], x[0][0], x[0][1].split(',')))
rd3 = rd2.map(lambda p:Row(id=int(p[0]), name=p[2], actor=str(p[1])))

关于python - 在 PySpark 中将 StringType 转换为 ArrayType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49681837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com