我已經嘗試在下面的代碼中Map通過 java 中的 spark 列獲取值,但null根據鍵搜索從 Map獲取期望值的值。
和 Spark 資料集包含一列,名稱是KEY和資料集名稱 dataset1
資料集中的值:
KEY
1
2
Java代碼 -
Map<String,string> map1 = new HashMap<>();
map1.put("1","CUST1");
map1.put("2","CUST2");
dataset1.withColumn("ABCD", functions.lit(map1.get(col("KEY"))));
電流輸出為:
ABCD (Column name)
null
null
預期輸出:
ABCD (Column name)
CUST1
CUST2
請我得到這個預期的輸出。
uj5u.com熱心網友回復:
你得到這個輸出的原因很簡單。getjava中的函式可以將任何物件作為輸入。如果該物件不在地圖中,則結果為空。
litspark中的函式用于創建單個值列(所有行都具有相同的值)。例如,lit(1)創建一個列,每行取值為 1。
在這里,map1.get(col("KEY"))(在驅動程式上執行),詢問map1與列物件對應的值(不是列內的值,代表列的 java/scala 物件)。地圖不包含該物件,因此結果為空。因此,您也可以撰寫lit(null). 這就是您在資料集中得到空結果的原因。
例如,為了解決您的問題,您可以將地圖訪問權限封裝在 UDF 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/313100.html
