2017-12-21 12 views
0

スパークデータフレーム内の特定の列を無視して列車の異なる回帰モデルをどのように実行しますか?列の値ごとに別々のモデルを訓練する方法は?

1つのSpark DFで、機能とラベルが付いた2つの製品があるとします。 製品のIDは、seprateカラムにあります。
それぞれの製品について回帰分析を実行したいと思います。

これまでrelaviely簡単な分析のために、私が使用している

w = Window().partitionBy("id") 
F.sum(column).over(w) 

例えばデータ

sdf = spark.createDataFrame(
     [("a", 1.0, 2.0, 3.0), ("a", 4.0, 1.0, 5.0), ("b", 2.0, 1.0, 0.0), ("b", 4.0, 0.0, 1.0)], 
     ["id", "y", "x1", "x2"]) 

id "a"と "b"の別のモデルを実行したいと思います。

+1

なぜ 'filter'を使用して条件に基づいてDataFrameを分割し、2つのDataFramesを別々に使用しないのですか? –

+0

こんにちは、それは可能な解決策の1つです。しかし、私は70,000のIDを持っているので、私は各IDのforループを実行したくありません。そこにグループをする方法はありますか? –

+0

あなたは 'groupBy'、' collect_list'または 'collect_set'を行い、コレクションごとにトレーニングをすることができますが、それはすぐに利用できず、ユーザー定義集計関数(UDAF)を書く必要があります。 –

答えて

0

あなたはgroupBycollect_listまたはcollect_setができ、コレクションごとにモデルのトレーニングを行うが、それはスパークMLlibに箱から出して利用できないとカスタム開発を必要とする、すなわちユーザ定義の集合関数(UDAF)を書き込みます。

filterを使用して条件に基づいてDataFrameを分割し、2つ以上のDataFramesを別々に使用することをおすすめします。

関連する問題