Есть ли какой-либо способ продолжать добавлять дополнительный столбец, который входит в файл, в «другой» столбец в pyspark?

#python #apache-spark #pyspark #apache-spark-sql

Вопрос:

У меня есть сценарий, в котором моя схема файла может измениться.Например: подумайте, получаю ли я сейчас 3 столбца "A","B","C" ; в следующий раз я могу получить случай, когда в файл будут добавлены 2 новых столбца "A","B","C","D","E" .
В этом случае я хочу добавить его в "other" столбец (типа JSON) в фрейме данных примерно так

 A  B  C  others
------------
1  2  3  {"D":4,"E":5}
 

Также может быть случай, когда столбец может отсутствовать, например, я могу не получить столбец A и буду получать только «B», «C».
Как справиться с этим в пыспарке ?

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

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

Ответ №1:

Вы можете использовать что-то вроде следующего —

 from pyspark.sql import SparkSession
from pyspark.sql.functions import *

df = spark.read.csv("demo.csv", header=True)
df_1 = df.select([c for c in df.columns if c not in {'A', 'B', 'C'}]) # this will give your unknown columns
df.select("A","B", "C", to_json(struct(df_1.columns)).alias("other")).show(10,False)
 

Примечание: в demo.csv есть эти столбцы ['A', 'B', 'C', 'D', 'E'] — этот список может отличаться, и среди них ['A', 'B', 'C'] есть ваши фиксированные/известные столбцы.

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

1. Спасибо. Я попробовал это, И это работает.