【问题标题】:How to apply FP-Growth to dataset after groupBy?如何在 groupBy 之后将 FP-Growth 应用于数据集?
【发布时间】:2017-10-11 10:36:04
【问题描述】:

我想在 Spark 2.1 中使用 Spark MLlib 中的 FP-Growth。

我的数据只有两列 item_groupitem

我尝试了以下方法,但它不起作用:

sc = SparkSession.builder.appName("Assoziationsanalyse").getOrCreate()
hiveCtx = SQLContext(sc)

input = hiveCtx.sql("""select  * from bosch.input_view""").
  groupBy("item_group").
  agg(collect_list("item")).
  alias("items").
  rdd.
  map(lambda x : x.items)

model = FPGrowth.train(input, minSupport=0.2, numPartitions=10)

【问题讨论】:

  • 鉴于您的数据集,item_group 似乎是独一无二的。那是对的吗?在这种特殊情况下,groupBy + collect_list 将是创建 FPGrowth 期望的数组列的简单转换。
  • item_group代表一个购物车,在上表中巧合的是每个item_group只出现一次。
  • 您能粘贴一个更有洞察力的数据集以供将来参考吗?请粘贴数据集(不是截图)。

标签: apache-spark pyspark apache-spark-mllib apache-spark-2.0


【解决方案1】:

我现在使用我在此处的讨论中找到的其他方法解决了这个问题。

data=hiveCtx.sql("""select  * from bosch.input_view""")

datardd=data.rdd.map(lambda x (x[0],x[1])).groupByKey().mapValues(list).values()

model = FPGrowth.train(datardd, minSupport=0.1, numPartitions=10)

【讨论】:

  • 你为什么使用 RDD (data.rdd)?你使用什么版本的 Spark?上面的代码可能非常无效(由于将数据集优化放在一边和groupByKey)。
  • @JacekLaskowski 不能在 DataFrame 上使用地图。我正在使用 Spark 2.1。如前所述,我对编程非常陌生,尤其是 spark。而且由于 FP-Growth 在 MLlib 中而不是在 ML 中,它可以与 RDD 一起使用而不能与 DataFrame 一起使用?对不起,如果我说错了,但这是我的想法。
  • 正确。 FPGrowth 似乎不适用于 DataFrame,但您至少可以使用 Dataset API 准备数据,并且只能在最后(在训练模型之前)将其留给 RDD API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2016-08-01
  • 2021-06-09
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多