【问题标题】:Add new column in pyspark data frame comparing two column present in same data frame在 pyspark 数据框中添加新列,比较同一数据框中存在的两列
【发布时间】:2020-03-02 15:19:53
【问题描述】:

我有一个包含两列 COL_1 和 COL_2 的数据框。

我想再添加一列 COL_3 和 COL_3 值将取决于下表中 COL_1 和 COL_2 的比较。

当两个值相同时 COL_3 = 有效

当两个值不同时 COL_3 = 无效

当两者都取值为 null 时 COL_3 = null

我尝试了下面的代码,但它不起作用。

df_Input = dataframe.withColumn("COL_3", (col("COL_1") != col("COL_1")), lit("Invalid")).otherwise(lit("valid"))

【问题讨论】:

  • 你已经接近了。使用func.when() 并给出两个标准,func.when(col('col_1') == col('col_2'), lit('valid')).when(col('col_1') != col('col_2'), lit('invalid'))null 不会满足其中任何一个,因此将导致 null

标签: pyspark pyspark-dataframes


【解决方案1】:

首先将在读取 CSV 文件时使用 lit 函数添加带有默认值的 col3

df = spark.read.format("csv").option("header", "true").option("delimiter","|").load('test.csv').withColumn('COL_3',lit('Invalid'))

现在将使用when 函数检查条件

df = df.withColumn('COL_3', when((col("COL_1") == col("COL_1")), 'Valid').when((col("COL_1") == 'null') & (col("COL_2" == 'null')),'null').otherwise(col('COL_3')))

【讨论】:

  • 如果两个列的值都有null会发生什么?
  • 我也添加了空条件。
  • @samkart 是对的,不需要另外使用,或者在读取时创建 col3。
  • df = df.withColumn('COL_3', when((col("COL_1") == col("COL_2")), '有效').when((col("COL_1" ) != col("COL_2")), 'Invalid').otherwise(lit("null"))) .....我正在尝试这个
  • @aamirmalik124 spark 中的 null 值由 None 表示,而不是“null”字符串,除非您的数据帧 null 被指定为“null”字符串。
【解决方案2】:
```df = df.withColumn('COL_3',\
        when((col("COL_1") == col("COL_2")), 'Valid').\
        when((col("COL_1") != col("COL_2")), 'Invalid').\
        otherwise(lit("NA")))```

在这里,我首先添加一列 COL_3,并在 when 函数的帮助下检查天气 COL_1 和 COL_2 是否相等或不同,我分配了 valid COL_3 的值无效。 如果 COL_1 和 COL_2 为空,则将 NA 分配给 COL_3。

【讨论】:

    猜你喜欢
    • 2021-07-09
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多