#dataframe #apache-spark #pyspark #apache-spark-sql
Вопрос:
Я новичок в PySpark и не знаю, в чем проблема с моим кодом. У меня есть 2 кадра данных
df1= --- -------------- | id|No_of_Question| --- -------------- | 1| Q1| | 2| Q4| | 3| Q23| |...| ...| --- -------------- df2 = -------------------- --- --- --- --- --- --- | Q1| Q2| Q3| Q4| Q5| ... |Q22|Q23|Q24|Q25| -------------------- --- --- --- --- --- --- | 1| 0| 1| 0| 0| ... | 1| 1| 1| 1| -------------------- --- --- --- --- --- ---
Я хотел бы создать новый фрейм данных со всеми столбцами из df2
определенного в df1.No_of_Question
.
Ожидаемый результат
df2 = ------------ | Q1| Q4| Q24| ------------ | 1| 0| 1| ------------
Я уже пробовал
df2 = df2.select(*F.collect_list(df1.No_of_Question)) #Error: Column is not iterable
или
df2 = df2.select(F.collect_list(df1.No_of_Question)) #Error: Resolved attribute(s) No_of_Question#1791 missing from Q1, Q2...
или
df2 = df2.select(*df1.No_of_Question)
от
df2= df2.select([col for col in df2.columns if col in df1.No_of_Question])
Но ни одно из этих решений не сработало. Не могли бы вы мне помочь, пожалуйста?
Ответ №1:
Вы можете собрать значения No_of_Question
в список python, а затем передать его df2.select()
.
Попробуй это:
questions = [ F.col(r.No_of_Question).alias(r.No_of_Question) for r in df1.select("No_of_Question").collect() ] df2 = df2.select(*questions)