#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. Ничего конкретного в руководстве по результатам, но если кто-то захочет скопировать данные и быстро сравнить или протестировать, в этом случае это было бы намного проще.