簡體   English   中英

如何基於Spark-SQL中的條件更新行

[英]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-sqldataframe的條件更新行的語法

record.getAs[String]("col2")="UNKNOWN"將不起作用,因為record.getAs[String](NAME)將返回沒有=方法的String ,並且為String分配新值不會沒有道理。

DataFrame記錄沒有任何設置方法,因為DataFrames基於RDD ,它們是不可變的集合,這意味着您無法更改它們的狀態,這就是您要在這里進行的操作。

一種方法是創建一個新的DataFrame使用selectExprtable_join和put if/else使用邏輯存在SQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM