转换后 Spark Dataframe 选择列
Posted
技术标签:
【中文标题】转换后 Spark Dataframe 选择列【英文标题】:Spark Dataframe Select Columns After Transformation 【发布时间】: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
中的所有列进行更多下游转换。
【问题讨论】:
【参考方案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]))
【讨论】:
好的。已经完成了。以上是关于转换后 Spark Dataframe 选择列的主要内容,如果未能解决你的问题,请参考以下文章
在 RDD 转换上保留 Spark DataFrame 列分区
使用 Spark Dataframe scala 将多个不同的列转换为 Map 列
PySpark:Spark Dataframe - 将 ImageSchema 列转换为 nDArray 作为新列