基于Spark Dataframe中的Condition创建一个新列



如何根据给定条件在Dataframe DF中创建新列。我有一个字符串数组,想将其与现有的数据帧进行比较

dataframe DF
+-------------------+-----------+
|     DiffColumnName|   Datatype|
+-------------------+-----------+
|  DEST_COUNTRY_NAME| StringType|
|ORIGIN_COUNTRY_NAME| StringType|
|              COUNT|IntegerType|
+-------------------+-----------+

和具有列名的字符串数组(这不是常数,可以更改(

val diffcolarray = Array("ORIGIN_COUNTRY_NAME", "COUNT")

我想在DF中创建一个新列,条件是如果diffcolarray中存在的列也存在于Dataframe的列DiffColumnName中,那么是,否则不是。

我已经尝试了以下选项,但是得到错误

val newdf = df.filter(when(col("DiffColumnName") === df.columns.filter(diffcolarray.contains(_)), "yes").otherwise("no")).as("issue")
val newdf = valdfe.filter(when(col("DiffColumnName") === df.columns.map(diffcolarray.contains(_)), "yes").otherwise("no")).as("issue")

比较时似乎存在数据类型不匹配的情况。输出应该是这样的。任何建议都会有帮助。谢谢

+-------------------+-----------+----------+
|     DiffColumnName|   Datatype|   Issue  |
+-------------------+-----------+----------+
|  DEST_COUNTRY_NAME| StringType|   NO     |
|ORIGIN_COUNTRY_NAME| StringType|   NO     |
|              COUNT|IntegerType|   YES    |
+-------------------+-----------+----------+

这可以为您提供所需的输出。

df.withColumn("Issue",when(col("DiffColumnName").isin(diffcolarray: _*),"YES").otherwise("NO")).show(false)

最新更新