Как объединить два столбца и добавить скобки вокруг нового столбца в pyspark

#apache-spark #pyspark #apache-spark-sql #concatenation

#apache-spark #pyspark #apache-spark-sql #конкатенация

Вопрос:

У меня есть фрейм данных, как показано ниже

 id | column A | Column B | Column C
123| apple    | Vitamins | Minerals
 

Я хочу объединить столбцы B и C и добавить скобки вокруг текста, например [B, C]. т.е. [Витамины, минералы]
Пожалуйста, помогите.

Комментарии:

1. Пожалуйста, не используйте ссылку на изображение в вопросе. Это затрудняет копирование данных для ответчика, а для других — просмотр вопроса.

Ответ №1:

Вы можете использовать concat :

 import pyspark.sql.functions as F

df2 = df.withColumn('columnD', F.expr("concat('[', columnB, ',', columnC, ']')"))
 

Ответ №2:

Я решил опубликовать весь рабочий код, чтобы вам было легче понять. Лей заключается в использовании concat ключевого слова для достижения желаемого результата.

Код:

 import findspark
findspark.init()
from pyspark import SparkContext
import pyspark.sql.functions as fn
from pyspark.sql import SparkSession, Row

sc = SparkContext.getOrCreate()
spark = SparkSession.builder.getOrCreate()

my_list = [
  {"id ":'123',"column A":'apple',"column B":'Vitamins',"column C":'Minerals'}
]

df = spark.createDataFrame(Row(**x) for x in my_list)
df.show()
df = df.withColumn('joined_column', fn.concat(fn.lit('['),df['column B'],fn.lit(','), df['column C'],fn.lit(']')))
df.show()
 

Результаты выполнения:

  -------- -------- -------- --- 
|column A|column B|column C|id |
 -------- -------- -------- --- 
|   apple|Vitamins|Minerals|123|
 -------- -------- -------- --- 

 -------- -------- -------- --- ------------------- 
|column A|column B|column C|id |      joined_column|
 -------- -------- -------- --- ------------------- 
|   apple|Vitamins|Minerals|123|[Vitamins,Minerals]|
 -------- -------- -------- --- ------------------- 
 

Комментарии:

1. Не могли бы вы удалить изображение и результаты в виде текста?

2. @koiralo Конечно, но из любопытства есть ли какие-либо такие рекомендации? Я понимаю, как это повлияет на код, но и на результаты тоже?

3. Ничего конкретного в руководстве по результатам, но если кто-то захочет скопировать данные и быстро сравнить или протестировать, в этом случае это было бы намного проще.