好吧,假设我有一个名为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|
+--------------------+----+--------------------+----+
你用tagScala标记了你的问题,但是你的UDF是用Python编写的,所以我猜你把事情搞混了。在
Spark是处理数据的引擎。它是用名为Scala的编程语言编写的,但它也有其他语言的API,比如Python。在
sparkscalaapi的语法与Pythons略有不同。你可以将你的UDF定义为:
你可以这样称呼它:
^{pr2}$如果您想用Python得到答案,那么重新标记您的问题并删除Scala标记并添加Python和pyspark标记。在
您的错误表明,您试图对列表使用
-
运算符,这在Python中不受支持。正确的UDF将如下所示:相关问题 更多 >
编程相关推荐