【发布时间】:2017-01-29 14:37:21
【问题描述】:
给定一个数据框:
+---+----------+
|key| value|
+---+----------+
|foo| bar|
|bar| one, two|
+---+----------+
然后我想使用 value 列作为 FPGrowth 的条目,它必须看起来像 RDD[Array[String]]
val transactions: RDD[Array[String]] = df.select("value").rdd.map(x => x.getList(0).toArray.map(_.toString))
import org.apache.spark.mllib.fpm.{FPGrowth, FPGrowthModel}
val fpg = new FPGrowth().setMinSupport(0.01)
val model = fpg.run(transactions)
我得到异常:
org.apache.spark.SparkException: Job aborted due to stage failure: Task 7 in stage 141.0 failed 1 times, most recent failure: Lost task 7.0 in stage 141.0 (TID 2232, localhost): java.lang.ClassCastException: java.lang.String cannot be cast to scala.collection.Seq
欢迎提出任何建议!
【问题讨论】:
-
问题:
df.select("value").rdd.map(x => x.getList(0)...,因为x是字符串,所以应该是x.getString(0) -
1)
.getString(0)将序列更改为 Charorg.apache.spark.SparkException: Items in a transaction must be unique but got WrappedArray(o, n, e, ,, t, w, o).的序列 2) 问题是异常,我不明白为什么 -
你试过了吗..
val transactions =df.select("value").rdd.map(_.toString.split(","))transactions: org.apache.spark.rdd.RDD[Array[String]] = MapPartitionsRDD[23] at map at <console>:35。可能这应该作为它返回RDD[Array[String]]
标签: apache-spark dataframe apache-spark-sql