在何时访问数据框的列名

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 中的列名创建一个新数据框,其中包含来自另一个数据框的列

基于 CSV 的 Spark 数据框的 PySpark 列名

选择函数中数据框的不带引号的列名