根据包含列表元素的列值创建布尔标志[重复]
Posted
技术标签:
【中文标题】根据包含列表元素的列值创建布尔标志[重复]【英文标题】:Create boolean flag based on column value containing element of a List [duplicate] 【发布时间】:2019-04-17 16:43:08 【问题描述】:def myFunction(df: DataFrame): DataFrame =
val myList= List("a","b","c")
df
.withColumn("myFlag",
if (myList.contains(df.select(col("columnName1")))) lit("true") else lit(false))
我想编写一个函数,它接受一个 Dataframe,并向其中添加一个名为“myFlag”的列。
如果对应的“columnName1”的值是“myList”的元素,我希望“myFlag”为true,否则为false。
为简单起见,“columnName1”值和“myList”仅包含字符串。
我上面的功能不起作用。有什么建议吗?
【问题讨论】:
【参考方案1】:这可以使用在Column
上定义的isin
来完成:
import spark.implicits._
df
.withColumn("myFlag",$"columnName1".isin(myList:_*))
【讨论】:
不确定 $ 在做什么。它似乎不起作用,所以请解释或更新。 当您想要引用列时使用 $ 符号。所以 $"col1" 将使用 "col1" 的值并执行后续操作,检查它是否在您的列表中,在上面的示例中。或者,您可以编写 col("col1") ,据我所知,这是一回事以上是关于根据包含列表元素的列值创建布尔标志[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Pandas列表的列,通过迭代(选择)三列的每个列表元素作为新列和行来创建多列[重复]
从 Kentico 10 中的自定义表重复器中过滤重复的列值