如何从另一个字符串数组中减去一个字符串数组?

2024-04-29 00:33:43 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,假设我有一个名为joinedarray的数据帧,它包含3列,其中2列是数组。 我在这2个数组中有一个字符串数组,我想在这两个数组类型之间做出区别。下面是一些示例输出,可以使这一点更有意义。在

 col1                                   col2                       diffcol
 ['Jack', 'Bill', 'George', 'Rose']     ['Jack', 'Rose', 'Robert']  ['Bill', 'George', 'Robert]

我创建了一个像这样的udf

^{pr2}$

我使用了这个两个col,然后尝试将它添加到我已经拥有的数据帧中。是这样的:

diff = udfsetdifference(joinedarrays.col1, joinedarrays.col2)

我得到以下错误

TypeError: unsupported operand type(s) for -: 'list' and 'list' 

我想把这个数据框加起来的时候

joinedarrays = joinedarrays.withColumn('diff', diff)

我对数组减法有点陌生,所以希望我能准确地解释一切。在

下面是show所做的(尽管这与我之前给出的数据不同,但我尝试了一个更通用的示例,并将其专门应用于此数据)。在

+--------------------+----+--------------------+----+
|        collect_list|year|     receivedontsend|diff|
+--------------------+----+--------------------+----+
|[Egypt, Equatoria...|2010|[Romania, Ireland...|null|
|[Egypt, Costa Ric...|2011|[Saint Martin, Gu...|null|
|[Egypt, Costa Ric...|2012|[Croatia, Ireland...|null|
|[Egypt, Equatoria...|2013|[Romania, Croatia...|null|
|[Egypt, Costa Ric...|2014|[Saint Martin, Ro...|null|
|[Egypt, Costa Ric...|2015|[Romania, Croatia...|null|
+--------------------+----+--------------------+----+

Tags: 数据示例diff数组nulllistcol2col1
1条回答
网友
1楼 · 发布于 2024-04-29 00:33:43

你用tagScala标记了你的问题,但是你的UDF是用Python编写的,所以我猜你把事情搞混了。在

Spark是处理数据的引擎。它是用名为Scala的编程语言编写的,但它也有其他语言的API,比如Python。在

sparkscalaapi的语法与Pythons略有不同。你可以将你的UDF定义为:

def udfsetdifference = udf { (l1: Seq[String], l2: Seq[String]) => l1.diff(l2) ++ l2.diff(l1) }

你可以这样称呼它:

^{pr2}$

如果您想用Python得到答案,那么重新标记您的问题并删除Scala标记并添加Pythonpyspark标记。在


您的错误表明,您试图对列表使用-运算符,这在Python中不受支持。正确的UDF将如下所示:

@udf (ArrayType(StringType()))

def udfsetdifference (l1, l2) : 
   return list(set(l1) ^ set(l2))

相关问题 更多 >