我運行一個查詢,試圖解析字符串映射,得到以下錯誤;
org.apache.spark。SparkRuntimeException:重複映射鍵被發現,請檢查輸入數據。如果你想刪除重複的鍵,可以設置“spark.sql。mapKeyDedupPolicy”到“LAST_WIN”這樣的關鍵插入最後優先。
不用擔心,所以我試著改變這個設置;
設置spark.sql.mapKeyDedupPolicy = LAST_WIN
並得到以下錯誤;
TStatus (statusCode: ERROR_STATUS infoMessages: [* org.apache.hive.service.cli。HiveSQLException:錯誤運行查詢:org.apache.spark.sql。spark.sql AnalysisException:配置。mapKeyDedupPolicy不可用:155:154,
這是當使用一個通用的集群,但是使用一個SQL倉庫時不起作用。所以我怎麼改變這個設置在SQL倉庫集群?如果這是不可能的,我怎麼繞過這個錯誤? x
@Maryam Najafian:
你得到這個錯誤的原因是spark.sql。mapKeyDedupPolicy配置不可用在SQL倉庫集群。這個配置是特定於火花不支持集群和倉庫在SQL。
要解決這個錯誤,你可以試著用另一種方法將字符串解析到一個地圖。一種方法是把字符串分割成一個鍵值對數組,然後使用map_from_arrays函數將數組轉換成一個地圖。這裏有一個例子:
選擇map_from_arrays(變換分割(“key1: value1, key2: value2, key3: value3 ', ', '), x - >分裂(x ': ')))
在這個例子中,我們首先將輸入字符串分割成數組的鍵-值對使用分屏功能。然後我們把這個數組創建一個數組的數組,其中每個內部數組包含兩個元素(鍵和值)。最後,我們使用map_from_arrays函數創建一個地圖數組的數組。
注意,這種方法假定輸入字符串的格式是正確的,不包含重複的鍵。如果輸入數據可能包含重複的鍵,您可以添加額外的邏輯來處理這種情況下,如使用array_distinct函數之前刪除重複的鍵將數組轉換為地圖。