我有一個 Spark 資料集
---------- ------- ---- --- --------------
| _1| _2| _3| _4| _5|
---------- ------- ---- --- --------------
| null|1111111|null| 15| [98765]|
| null|2222222|null| 16|[97008, 98765]|
|6436334664|3333333|null| 15| [97008]|
|2356242642|4444444|null| 11| [97008]|
---------- ------- ---- --- --------------
其中第五列是與該行關聯的郵政編碼串列。我有另一個表,其中每個郵政編碼都有唯一的行以及相應的經度和緯度。我想創建一個像
---------- ------- ---- --- -------------- -----------------------------------
| _1| _2| _3| _4| _5| _6|
---------- ------- ---- --- -------------- ----------------------------------
|3572893528|1111111|null| 15| [98765]| [(54.12,-80.53)] |
|5325232523|2222222|null| 16|[98765, 97008]| [(54.12,-80.53), (44.12,-75.11)] |
|6436334664|3333333|null| 15| [97008]| [(54.12,-80.53)] |
|2356242642|4444444|null| 11| [97008]| [(54.12,-80.53)] |
---------- ------- ---- --- -------------- ----------------------------------
其中第六列是第五列序列中拉鏈的坐標。
每次我需要坐標時,我都嘗試過濾郵政編碼表,但我得到了一個 NPE,我認為是因為這個問題中詳述的類似原因。如果我在過濾之前嘗試收集郵政編碼表,我的記憶體就會用完。
我正在使用 Scala,并且在 Spark 作業中使用 Spark SQL 獲得了原始資料集。任何解決方案將不勝感激,謝謝。
uj5u.com熱心網友回復:
讓我們假設(對您的問題的評論成立并且)我們有兩個資料集(簡化您的示例)ds和ds2,分別:
--- --------------
|_1 |_2 |
--- --------------
|15 |[98765] |
|16 |[97008, 98765]|
|15 |[97008] |
|15 |[97008] |
--- --------------
----- ---------------
|_2 |_3 |
----- ---------------
|98765|{54.12, -80.53}|
|97008|{44.12, -75.11}|
----- ---------------
這個想法是創建一個唯一 ID(以便我們稍后加入)explode資料集,然后join獲取每個唯一 ID 的坐標,最后再次加入表。
創建唯一 ID:
ds = ds.withColumn("id", monotonically_increasing_id())
然后創建包含id您的郵政編碼的映射表:
val map = ds
.withColumn("_2", explode(col("_2")))
.join(ds2, Seq("_2"), "left")
.groupBy("id").agg(collect_set(col("_3")))
最后加入主表:
ds = ds.join(map, Seq("id"))
最終輸出:
--- -------------- ----------------------------------
|_1 |_2 |collect_set(_3) |
--- -------------- ----------------------------------
|15 |[98765] |[{54.12, -80.53}] |
|16 |[97008, 98765]|[{54.12, -80.53}, {44.12, -75.11}]|
|15 |[97008] |[{44.12, -75.11}] |
|15 |[97008] |[{44.12, -75.11}] |
--- -------------- ----------------------------------
祝你好運!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/510798.html
