2017-03-18 4 views
1

Sparkでonehotencoderを使用すると、4番目の列のように結果が得られます。これは疎なベクトルです。Pandasでonehotencoderのように動作するようにSparkのonehotencoderを作成するには?

// +---+--------+-------------+-------------+ 
// | id|category|categoryIndex| categoryVec| 
// +---+--------+-------------+-------------+ 
// | 0|  a|   0.0|(3,[0],[1.0])| 
// | 1|  b|   2.0|(3,[2],[1.0])| 
// | 2|  c|   1.0|(3,[1],[1.0])| 
// | 3|  NA|   3.0| (3,[],[])| 
// | 4|  a|   0.0|(3,[0],[1.0])| 
// | 5|  c|   1.0|(3,[1],[1.0])| 
// +---+--------+-------------+-------------+ 

しかし、私が望むのは、パンダでの動作と同じように、カテゴリに対して3つの列を生成することです。

>>> import pandas as pd 
>>> s = pd.Series(list('abca')) 
>>> pd.get_dummies(s) 
    a b c 
0 1 0 0 
1 0 1 0 
2 0 0 1 
3 1 0 0 
+0

なぜこれをやりたいですか?これにより、データが非常に大きくなり、メモリが非効率になります。 –

+0

データセットに大きな値を持たないため、大きなデータを作成することはありません。結果フィーチャは122(122列)になります。私はそれをしたいので、TensorFlowで処理する方が簡単です。私はニューラルネットワークへの入力としてデータを供給したい。 –

答えて

0

カントのコメント私は代わりに質問に答える、評判ポイントを持っていけないので。

これは実際にスパークパイプラインと変圧器に関する最高のものの1つです!私はあなたがなぜこの形式でそれを入手する必要があるのか​​理解していません。あなたは精緻化できますか?

+0

返信ありがとうございます。上記の私のコメントを繰り返します:私は私のデータセットでは多くの明確な値を持っていないので、それは大きなデータを作ることはありません。結果フィーチャは122(122列)になります。私はそれをしたいので、TensorFlowで処理する方が簡単です。私はニューラルネットワークへの入力としてデータを供給したい。 –

1

スパークのOneHotEncoderは、スパースベクトル列を作成します。 pandas OneHotEncoderと同様の出力列を作成するには、カテゴリごとに別々の列を作成する必要があります。 udfをパラメータとして渡すことで、pysparkデータフレームのwithColumn関数の助けを借りて行うことができます。元について -

from pyspark.sql.functions import udf,col 
from pyspark.sql.types import IntegerType 


df = sqlContext.createDataFrame(sc.parallelize(
     [(0,'a'),(1,'b'),(2,'c'),(3,'d')]), ('col1','col2')) 

categories = df.select('col2').distinct().rdd.flatMap(lambda x : x).collect() 
categories.sort() 
for category in categories: 
    function = udf(lambda item: 1 if item == category else 0, IntegerType()) 
    new_column_name = 'col2'+'_'+category 
    df = df.withColumn(new_column_name, function(col('col2'))) 

print df.show() 

出力 -

+----+----+------+------+------+------+           
|col1|col2|col2_a|col2_b|col2_c|col2_d| 
+----+----+------+------+------+------+ 
| 0| a|  1|  0|  0|  0| 
| 1| b|  0|  1|  0|  0| 
| 2| c|  0|  0|  1|  0| 
| 3| d|  0|  0|  0|  1| 
+----+----+------+------+------+------+ 

私はこのことができます願っています。

関連する問題