Pyspark-另一个列列表中的列项目

时间:2020-04-10 14:38:35

标签: python pyspark pyspark-sql pyspark-dataframes

我是pyspark的新手,正在寻找column2项目列表中的column1项目。让我们举个例子。

让我们用Google搜索举一个简单的例子-3列-query-字符串,hrefs-列表和clicked_url-字符串,我需要检查clicked_url是否为在hrefs中。

可能会发生3种情况:

如果clicked_url在href列表中,则保留该行

如果clicked_url不在href列表中,则过滤出该行-删除。 (您可以将其想象为点击广告)

如果clicked_url为空(没有clicked_url),则保留该行,但将clicked_url的值更改为0。

query  |    hrefs       | clicked_url 
------------------------------------
car    |[url1,...url10] | url1
monkey |[url11,...url20]| url11
mouse  |[url21,...url30]| url11
donkey |[url31,...url40]| "" - empty string
ball   |[url41,...url50]| url45
monkey |[url11,...url20]| url1

所需的输出:

query  |    hrefs       | clicked_url 
------------------------------------
car    |[url1,...url10] | url1
monkey |[url11,...url20]| url11
donkey |[url31,...url40]| 0
ball   |[url41,...url50]| url45

谢谢!

2 个答案:

答案 0 :(得分:2)

尝试一下:

notebook_widget.tab(tab_idx, text='Another text')

答案 1 :(得分:2)

Pyspark的实现方式

对于 array_contains ,您只需使用表达式 F.expr 即可发送 value < / strong>部分作为列。

from pyspark.sql import functions as F
df.withColumn("clicked_url", F.when(F.col("clicked_url")=="", F.lit(0)).otherwise(F.col("clicked_url")))\
  .withColumn("boolean", F.expr("""array_contains(hrefs,clicked_url)"""))\
  .filter("boolean=true or clicked_url=0").drop("boolean").show()

+------+--------------------+-----------+
| query|               hrefs|clicked_url|
+------+--------------------+-----------+
|   car|       [url1, url10]|       url1|
|monkey|      [url11, url20]|      url11|
|donkey|      [url31, url40]|          0|
|  ball|[url41, url45, ur...|      url45|
+------+--------------------+-----------+

.filter 也可以接受 expression ,因此您可以在其中输入 array_contains

from pyspark.sql import functions as F
df.withColumn("clicked_url", F.when(F.col("clicked_url")=="", F.lit(0))\
              .otherwise(F.col("clicked_url")))\
  .filter("array_contains(hrefs,clicked_url)=true or clicked_url=0").show()

+------+--------------------+-----------+
| query|               hrefs|clicked_url|
+------+--------------------+-----------+
|   car|       [url1, url10]|       url1|
|monkey|      [url11, url20]|      url11|
|donkey|      [url31, url40]|          0|
|  ball|[url41, url45, ur...|      url45|
+------+--------------------+-----------+