1

私はSpark 2.1でSpark MLlibのFP-Growthを使いたいと思っています。groupBy後にFP-Growthをデータセットに適用する方法は?

私のデータは2列だけitem_groupitemです。

dataset

は、私は、次の試してみましたが、それは動作しません:

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) 
+0

あなたのデータセットを考えると、item_groupは一意であるようです。あれは正しいですか?この特定の場合、 'groupBy' +' collect_list'はFPGrowthが期待する配列列を作成する単純な変換になります。 –

+0

'item_group'はショッピングカートを表しています。上記の表では、偶然にも各item_groupが一度だけ表示されています。 –

+0

今後の参考になるよう、より詳細なデータセットを貼り付けることはできますか?データセットを貼り付けてください(スクリーンショットではありません)。 –

答えて

0

私は今、私はここでの議論で発見した他のapprochを使用して問題を解決しました。

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) 
+0

なぜRDD( 'data.rdd')を使用していますか?どのバージョンのSparkを使用しますか?上記のコードは非常に効果的ではありません(データセットの最適化と 'groupByKey'を残しているため)。 –

+0

@JacekLaskowskiはDataFrame上でマップを使用できません。私はSpark 2.1を使用しています。前に述べたように、私はプログラミングで非常に新しい、特にスパークします。 FP-GrowthはMLではなくMLlibに含まれているので、RDDで動作し、DataFrameで動作することはできません。申し訳ありませんが、私は間違ったことを言っているが、それは私が思ったものです。 –

+0

修正。 FPGrowthはDataFramesでは使用できないようですが、少なくともデータセットAPIを使用してデータを準備することができます。モデルをトレーニングする前に、RDD APIのままにしておいてください。 –

関連する問題