【问题标题】:Droping columns based on some value in pyspark根据 pyspark 中的某些值删除列
【发布时间】:2022-02-17 17:45:37
【问题描述】:

我有以下df,我想过滤掉所有包含https的列

df = spark.createDataFrame([
    ('https:john', 'john', 1.1, 'httpsasd'), 
    ('https:john', 'john', 1.2, 'httpsasd')
], ['website', 'name', 'value', 'other']
)

我找到了一个答案,它没有将列内的 str 作为过滤器:PySpark drop columns based on column names / String condition

我正在寻找的是如下输出:

name       | value
--------------------
john       | 1.1    
pete       | 1.2    

【问题讨论】:

  • 你的预期输出是什么?
  • 只有 'name','value' 列的 df。
  • 你能以粗略的格式发布你想要的最终输出吗

标签: python dataframe apache-spark pyspark apache-spark-sql


【解决方案1】:

对每一列使用条件计数来检查它是否包含至少一行具有类似https 的值,然后使用count > 0 删除列:

from pyspark.sql import functions as F

cols_https_count = df.select(*[
    F.count(F.when(F.col(c).rlike("https"), 1)).alias(c)
    for c in df.columns
]).collect()[0].asDict()

cols_to_drop = [k for k, v in cols_https_count.items() if v > 0]

df = df.drop(*cols_to_drop)

df.show()
#+----+-----+
#|name|value|
#+----+-----+
#|john|  1.1|
#|john|  1.2|
#+----+-----+

【讨论】:

    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 2017-06-26
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多