你好,
我想把記錄在表2記錄基於列值。請參閱下麵的示例。輸入表顯示3類型的產品及其價格。特定產品(行)隻注意到其相應的列值。其他列零。
我的要求是,隻要產品列值(連續)複合(如有多個產品,如螺栓+刷),記錄必須分成兩行- 1行每個複合產品類型。所以,在這個例子中,注意第二行被分成2行- > 1行“栓”,另一個用於“刷”,與他們的價格(我從相應的列。e在這種情況下,“栓”= 3.99美元,“刷”= 6.99美元)
請注意:複合產品的值可以有最多2產品如本例中所示(如螺栓+刷)
輸入:
CustIdProductHammerBoltBrush1234Hammer 5.99美元零 零 7639年 螺栓+刷 零 3.99美元 6.99美元6322刷零 零6.99美元
要求輸出:
CustIdProductPrice1234Hammer 5.99美元7639年 螺栓 3.99美元 7639年 刷 6.99美元6322刷6.99美元 誰能請幫我解決。這需要解決了Spark-SQL隻。問候
嗨@rishigc
您可以使用下麵的類似。
選擇爆炸(arrays_zip(分裂(產品,“+”),把(價格,' + '))與df product_and_price
或
df。withColumn (“product_and_price”,爆炸(arrays_zip(分裂(產品,“+”),分裂(價格,' + ')))。選擇(“CustId”、“prodAndPrice美元。產品", $"prodAndPrice.Price").show()
df是dataframe。
分裂
函數列分成數組的產品和價格的數組。這兩個數組將被合並arrays_zip
,所以n產品將被映射到n個價格。然後合並後的數組使用爆炸爆炸
,因此數組中的每個元素,將成為一個單獨的行。
請讓我們知道它的工作原理。
謝謝