0

我面對pyspark SQL查詢字符串連接問題()

spark.sql("select *,rtrim(IncomeCat)+' '+IncomeCatDesc as trimcat from Dim_CMIncomeCat_handled").show() 

在此查詢過程中特有的或未知的串聯問題都IncomeCat和IncomeCatDesc字段保存字符串類型值,因此在邏輯上我認爲它會串連,但我得到空

enter image description here

合成磁場在實現的結果將是「14100abcd」,其中14100是IncomeCat一部分,abcd是IncomeCatdesc一部分。我已經嘗試在IncomeCat字段上進行明確投射,以及在IncomeCat字段

spark.sql("select *,cast(rtrim(IncomeCat) as string)+' '+IncomeCatDesc as IncomeCatAndDesc from Dim_CMIncomeCat_handled").show() 

但我得到的結果相同。所以我在這裏失蹤了。請幫助我解決這個問題 謝謝\ Kalyan

+0

要注意的一點是rtrim(IncomCat)正在工作,但是當我與IncomeCatDesc值連接時,它會給出null – Kalyan

回答

0

Spark不覆蓋+運算符的字符串和作爲結果查詢您使用不表示串聯。如果在基本的例子來看看你就會明白是怎麼回事:

spark.sql("SELECT 'a' + 'b'").explain() 
== Physical Plan == 
*Project [null AS (CAST(a AS DOUBLE) + CAST(b AS DOUBLE))#48] 
+- Scan OneRowRelation[] 

兩個參數都假定爲數字和一般情況下,結果將是不確定的。當然,它會爲可強制轉換爲NUMERICS字符串的工作:

spark.sql("SELECT '1' + '2'").show() 
+---------------------------------------+ 
|(CAST(1 AS DOUBLE) + CAST(2 AS DOUBLE))| 
+---------------------------------------+ 
|         3.0| 
+---------------------------------------+ 

連接字符串,您可以使用concat

spark.sql("SELECT CONCAT('a', 'b')").show() 
+------------+ 
|concat(a, b)| 
+------------+ 
|   ab| 
+------------+ 

concat_ws

spark.sql("SELECT CONCAT_WS('*', 'a', 'b')").show() 
+------------------+ 
|concat_ws(*, a, b)| 
+------------------+ 
|    a*b| 
+------------------+