我是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
谢谢!
答案 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|
+------+--------------------+-----------+