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| 
+------------------+