2

Spark プログラミングは初めてで、一連の値が入力に表示されたときに値を割り当てるシナリオがあります。以下は、タスクを達成するために使用する伝統的な SQL コードです。Spark でも同じことを行う必要があります。

SQL コード:

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

私はwhen1つの条件だけでスパークを使用することを認識しています。

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

1 に答える 1

6

RDD ではなく、Spark DataFrame を使用していると想定しています。注意すべきことの 1 つは、SQL クエリを DataFrame で直接実行できることです。

# 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 ステートメントを模倣するユーザー定義関数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()
于 2016-04-26T20:47:32.523 に答える