PySpark: перенесите все столбцы фрейма данных, определенные как значения, в другой столбец

#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)