2016-04-26 20 views
2

Sparkプログラミングの初心者で、入力に値のセットが表示されたときに値を割り当てるシナリオがあります。以下は私の仕事を達成するために使用する伝統的なSQLコードです。スパークで同じことをする必要があります。ケースがPysparkのIN句を含むステートメント

SQLコード:

SELECT CASE WHEN c.Number IN ('1121231', '31242323') THEN 1 
ELSE 2 END AS Test 
FROM Input c 

私はただ一つの条件とスパークにwhenを使用しての認識しています。

Input.select(when(Input.Number==1121231,1).otherwise(2).alias("Test")).show() 

答えて

3

私は、RDDではなく、Spark DataFramesで作業していると仮定しています。もう一つ注意すべきは、あなたがデータフレーム上で直接SQLクエリを実行することができるということです。

# register the DataFrame so we can refer to it in queries 
sqlContext.registerDataFrameAsTable(df, "df") 

# put your SQL query in a string 
query = """SELECT CASE WHEN 
    df.number IN ('1121231', '31242323') THEN 1 ELSE 2 END AS test 
    FROM df""" 

result = sqlContext.sql(query) 
result.show() 

あなたはまた、あなたのクエリのcase文を模倣user-defined functionを作成することによってselectを使用することができます。

from pyspark.sql.types import * 
from pyspark.sql.functions import udf 

# need to pass inner function through udf() so it can operate on Columns 
# also need to specify return type 
column_in_list = udf(
    lambda column: 1 if column in ['1121231', '31242323'] else 2, 
    IntegerType() 
) 

# call function on column, name resulting column "transformed" 
result = df.select(column_in_list(df.number).alias("transformed")) 
result.show() 
+0

感謝をあなたの応答を。出来た。 sparkデータフレームにwhen関数を直接使用して値のリストを与える方法はありますか? – Sid

+2

私は自分がしたいことを見つけたと思う。 df.when(df.char.isin( 'H'、 'O'、 'M')、1).other(0) – Sid

+0

@ user3258274これも機能します。 DataFrameをrddに変換し、次のように収集することで、列から値のリストを抽出することもできます: 'rdd = df.rdd; rdd.map(ラムダx:x.transform).collect() ' –

関連する問題