在何时访问数据框的列名
Posted
技术标签:
【中文标题】在何时访问数据框的列名【英文标题】:Accessing column names of dataframe in when 【发布时间】:2019-12-25 22:46:39 【问题描述】:消磨时间。这里的非熊猫场景,在 pyspark 中,我可以生成列值,该值是与相关列名连接的值,例如我提供的解决方案:Appending column name to column value using Spark.
然后,如下:
import org.apache.spark.sql.functions._
import spark.implicits._
val df = sc.parallelize(Seq(
("r1", 0.0, 0.0, 0.0, 0.0),
("r2", 6.4, 4.9, 6.3, 7.1),
("r3", 4.2, 0.0, 7.2, 8.4),
("r4", 1.0, 2.0, 0.0, 0.0)
)).toDF("ID", "aa1a", "bb3", "ccc4", "d1ddd")
val count_zero = df.columns.tail.map(x => when(col(x) === 0.0, 1).otherwise(0)).reduce(_+_)
df.withColumn("zero_count", count_zero).show(false)
那么,如果(仅)为了争论,
我还想检查实际列名是否在其名称中的某处包含“1”,作为添加 1 的额外条件。
而我想要这个在 val_count_zero 之内的时候?
我对生成列列表、要处理的序列不感兴趣。
正如我所说,这是为了争论。我在这里找不到在 Scala 中对数据框进行列名检查的方法。
【问题讨论】:
【参考方案1】:如果我正确理解您的要求,您可以Column
-ize 列名并使用方法contains
包含附加条件:
val count_zero = df.columns.tail.map(x =>
when(lit(x).contains("1") && col(x) === 0.0, 1).otherwise(0)
).
reduce(_ + _)
【讨论】:
你漂亮。所以要检查列名本身,我需要 lit(x)。明白了,谢谢!我知道缺少一些东西。以上是关于在何时访问数据框的列名的主要内容,如果未能解决你的问题,请参考以下文章
根据 R 中的列名创建一个新数据框,其中包含来自另一个数据框的列