0

я столкнулся своеобразной или неизвестная проблемой конкатенации при pyspark SQL запросаСтрока проблема конкатенации в свече SQL при использовании RTRIM()

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

В этом запросе оба IncomeCat и IncomeCatDesc поля содержат значение типа String, так логически я думал было бы конкатенации, но я получить результирующее поле нулевой

enter image description here

где достижима результат будет «14100abcd», где 14100 является IncomeCat частью и ABCD является IncomeCatdesc часть. Я также пробовал явное литье также на поле IncomeCat

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

но я получаю такой же результат. так что я здесь что-то не хватает. любезно помочь мне решить эту благодаря \ Калян

+0

Следует отметить, что работает rtrim (IncomCat), но когда я соединяюсь с значением IncomeCatDesc, он дает null – Kalyan

ответ

0

Спарк не отменяет + оператора для строк и в результате запроса вы используете не выразить конкатенацию. Если вы посмотрите на простом примере, вы увидите, что происходит:

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

Оба аргумента предполагаются числовыми и в общем случае результат будет неопределенным. Конечно, это будет работать для строк, которые могут быть литыми для числовых значений:

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

 Смежные вопросы

  • Нет связанных вопросов^_^