when
條款轉化爲case clause
,你可以涉及到SQL case子句。
例
scala> val condition_1 = when(col("col_1").isNull,"NA").otherwise("AVAILABLE")
condition_1: org.apache.spark.sql.Column = CASE WHEN (col_1 IS NULL) THEN NA ELSE AVAILABLE END
,或者你可以鏈when
條款以及
scala> val condition_2 = when(col("col_1") === col("col_2"),"EQUAL").when(col("col_1") > col("col_2"),"GREATER").
| otherwise("LESS")
condition_2: org.apache.spark.sql.Column = CASE WHEN (col_1 = col_2) THEN EQUAL WHEN (col_1 > col_2) THEN GREATER ELSE LESS END
scala> val new_df = df.withColumn("condition_1",condition_1).withColumn("condition_2",condition_2)
不過,如果你想使用的表,那麼你就可以在你的數據幀/數據集作爲temperory表登記並執行sql查詢
df.createOrReplaceTempView("tempTable")//spark 2.1 +
df.registerTempTable("tempTable")//spark 1.6
現在
,你可以進行SQL查詢
spark.sql("your queries goes here with case clause and where condition!!!")//spark 2.1
sqlContest.sql("your queries goes here with case clause and where condition!!!")//spark 1.6
但我仍然無法更新數據集,因爲火花不接受**更新**聲明 –
一旦你得到一個基於輸入條件過濾數據框,您可以創建具有更新值的新列在數據框中。 – magic