从dataframe列创建pysparkMap并应用到另一个dataframe

ifsvaxew  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(638)

我最近遇到了一个问题,我想用另一个Dataframe的列Map一个Dataframe的许多列—实际上是一个查找表,允许我用另一个ID替换一组ID。这可以通过一些简单的方法来实现 joins ,匹配要Map的列数。在 Scala Spark ,这可以通过 Map . 类似的事情能在中国做吗 PySpark ?

f5emj3cl

f5emj3cl1#

这可以通过利用
pyspark.sql.functions.map_from_entries pyspark.sql.functions.collect_list pyspark.sql.functions.struct crossJoin 按以下顺序:

  1. # original_and_new_df is a 2 column table containing rows original_id, new_id
  2. # input_df is a table containg colums with original_ids,
  3. # such as f.col(id_col_1), f.col(id_col_2)
  4. input_df_with_mapping_col = input_df.crossJoin(
  5. original_and_new_df.select(
  6. f.map_from_entries(
  7. f.collect_list(
  8. f.struct(f.col(original_id), f.col(new_id)))
  9. ).alias(mapping_column_name)
  10. )
  11. )
  12. # apply the mappings
  13. input_df_with_mapping_col.select(
  14. f.col(mapping_column_name)[f.col(id_col_1)].alias(id_col_1),
  15. f.col(mapping_column_name)[f.col(id_col_2)].alias(id_col_2),
  16. )
展开查看全部

相关问题