字符串连接问题()
问题描述:
我面对pyspark SQL查询字符串连接问题()
spark.sql("select *,rtrim(IncomeCat)+' '+IncomeCatDesc as trimcat from Dim_CMIncomeCat_handled").show()
在此查询过程中特有的或未知的串联问题都IncomeCat和IncomeCatDesc字段保存字符串类型值,因此在逻辑上我认为它会串连,但我得到空
合成磁场在实现的结果将是“14100abcd”,其中14100是IncomeCat一部分,abcd是IncomeCatdesc一部分。我已经尝试在IncomeCat字段上进行明确投射,以及在IncomeCat字段
spark.sql("select *,cast(rtrim(IncomeCat) as string)+' '+IncomeCatDesc as IncomeCatAndDesc from Dim_CMIncomeCat_handled").show()
但我得到的结果相同。所以我在这里失踪了。请帮助我解决这个问题 谢谢\ Kalyan
答
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|
+------------------+
要注意的一点是rtrim(IncomCat)正在工作,但是当我与IncomeCatDesc值连接时,它会给出null – Kalyan