【问题标题】:Spark Dataframe Select Columns After Transformation转换后 Spark Dataframe 选择列
【发布时间】:2018-04-14 18:29:17
【问题描述】:

我正在检查我的 DF 中 6 列中的 2 列的 NULL 值。但是当我应用内置函数并使用 select 时,结果 DF 没有剩余的列。有没有更好的方法不使用 UDF。

handle_null_cols = [ 'col1', 'col3' ]

# df_null = df.select([ myFunc(col_name).alias(col_name) for col_name in df.columns ])
df_null = df.select( [ myFunc(col_name).alias(col_name) for col_name in handle_null_cols ])

df_null.printSchema() # Resultant DF has only 2 columns selected

col1:int
col3:int

需要重用相同的 DF df_null 以对最初在 df 中的所有列进行更多下游转换。

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql user-defined-functions


    【解决方案1】:

    你为什么不做这样的事情?

    df.select([
        myFunc(col_name).alias(col_name) if col_name in handle_null_cols
        else col_name
        for col_name in df.columns
    ])
    

    reduce + withColumn 是更神秘但可行的解决方案:

    from functools import reduce
    
    reduce(
        lambda df, col_name: df.withColumn(col_name, myFunc(col_name)), 
        handle_null_cols,
        df)
    

    但这听起来有点像你真的想要na 函数:

    df.na.fill(0, subset=handle_null_cols)
    

    【讨论】:

      【解决方案2】:

      我想我是根据@user9613318 的见解弄清楚的。 更容易养眼。以及性能效率?

      handle_null_cols = [ 'col1', 'col3' ]
      
      df_null = ( df.select(*[myFunc(col).alias(col) 
      if col in handle_null_cols else col for col in df.columns]))
      

      【讨论】:

      • 好的。已经完成了。
      猜你喜欢
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2016-12-01
      • 2022-01-22
      • 2018-04-17
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多