我试图在我的数据集上运行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]
如何在这个形式中从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'])]
根据您之前的问题,您似乎错误地构建了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])))
改变是我们称之为<code>str。在x[0][1]
上拆分(,”,以便将类似“a,b”的字符串转换为列表:['a',b']
。
数据帧的< code>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])))
是否可以将StringType列强制转换为spark dataframe中的ArrayType列? A:数组(nullable=true)
我有一个包含json字符串的数据框架df,如下所示, df 架构: 如何将其转换为字符串数组(数组类型(字符串类型())? 结果应该是这样的, 结果模式: 任何帮助都将不胜感激。谢谢你!
我有一个名为的DataFrame,它具有混合类型的列。我正在尝试将的列的任何空值设置为。我认为下面的代码可以工作,但事实并非如此。 我正在查看错误消息,它并没有给我多少线索: Traceback(最近的最后一次调用):File",第1行,在File"/usr/lib/python2.7/site-pack/pyspark/sql/column.py",第116行,在_njc=getattr(自身_
在从< code>RDD制作< code >数据帧时,我遇到了一个错误。 我收到以下错误: py spark . SQL . utils . parse exception:u " \ nmis matched input ' '应为{'SELECT ',' FROM ',' ADD ',' AS ',' ALL ',' DISTINCT ',' WHERE ',' GROUP ',' BY ',
任何帮助都将不胜感激!
我得到一串零。有人能帮忙吗?