[英]How to update rows based on condition in spark-sql
我正在使用spark-sql進行數據准備。
我面臨的問題是在獲得sql查詢的結果之后。 我應該如何基於If-then-else條件更新行。
我在做什么
val table_join = sqlContext.sql(""" SELECT a.*,b.col as someCol
from table1 a LEFT JOIN table2 b
on a.ID=b.ID """)
table_join.registerTempTable("Table_join")
現在,當我最終連接了df格式的表時。 我應該如何更新行?
//Final filtering operation
val final_filtered_table = table_join.map{ case record=>
if(record.getAs[String]("col1") == "Y" && record.getAs[String]("col2") == "") record.getAs[String]("col2")="UNKNOWN"
else if (record.getAs[String]("col1") == "N") record("col1")=""
else record
}
在上面的地圖中,if語法正常運行,但是當我應用更新條件進行修改時,它給了我錯誤。
但是為什么下面的查詢有效
if(record.getAs[String]("col1") == "Y" && record.getAs[String]("col2") == "") "UNKNOWN"
但是當我將"UNKNOWN"
更改為record.getAs[String]("col2")="UNKNOWN"
它在.getAs
處給我錯誤
我嘗試的另一種方法是:
val final_filtered_sql = table_join.map{row =>
if(row.getString(6) == "Y" && row.getString(33) == "") row.getString(6) == "UNKNOWN"
else if(row.getString(6) == "N") row.getString(6) == ""
else row
}
這是可行的,但這是正確的方法,因為我不應該用列的no來命名列,而應該用名稱來命名。 我應該遵循什么方法來獲取列的名稱,然后更新?
請幫助我。 我應該根據dataframe
spark-sql
中dataframe
的條件更新行的語法
record.getAs[String]("col2")="UNKNOWN"
將不起作用,因為record.getAs[String](NAME)
將返回沒有=
方法的String
,並且為String
分配新值不會沒有道理。
DataFrame
記錄沒有任何設置方法,因為DataFrames
基於RDD
,它們是不可變的集合,這意味着您無法更改它們的狀態,這就是您要在這里進行的操作。
一種方法是創建一個新的DataFrame
使用selectExpr
上table_join
和put if/else
使用邏輯存在SQL
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.