Python 在PySpark中将StringType转换为ArrayType

Python 在PySpark中将StringType转换为ArrayType,python,apache-spark,dataframe,pyspark,rdd,Python,Apache Spark,Dataframe,Pyspark,Rdd,我正在尝试在我的数据集上运行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.IllegalArgumentEx

我正在尝试在我的数据集上运行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
 name
[ab,df]
[rs,ce]
如果“名称”列中的数据格式为:

df.show(2)

+---+---------+--------------------+
| id|     name|               actor|
+---+---------+--------------------+
|  0|['ab,df']|                 tom|
|  1|['rs,ce']|                brad|
+---+---------+--------------------+
only showing top 2 rows
 name
[ab,df]
[rs,ce]
如何在从StringType转换为ArrayType的表单中获得它

我从我的RDD形成了数据帧:

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
列中,每行按逗号分割。e、 g

或者更好,不要拖延。将名称直接设置到列表中

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])))
基于,似乎您正在错误地构建
rdd2

试试这个:

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])))
变化是我们在
x[0][1]
上调用
str.split(“,”)
,这样它就可以将像“a,b”这样的字符串转换成一个列表:
['a',b']