Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark同时从dataframe中的2个列表中删除_Python_List_Pyspark_Pyspark Sql_Pyspark Dataframes - Fatal编程技术网

Python Pyspark同时从dataframe中的2个列表中删除

Python Pyspark同时从dataframe中的2个列表中删除,python,list,pyspark,pyspark-sql,pyspark-dataframes,Python,List,Pyspark,Pyspark Sql,Pyspark Dataframes,我有一个巨大的数据集问题,我正在寻找从2个列表删除相同的索引项 让我描述一个例子 想象一下,谷歌搜索页面上有12个URL。第一个是广告,最后一个也是,第二个和第七个是图片链接。现在我只想要有机的链接 类型可以在列表中随机定位。我正在检查array\u remove,这很好,但是它只能从1个列表中删除特定的项,而且我还没有足够的能力来解决如何在2个列表中同时执行此操作。遗憾的是,数据集实在太大了,我恐怕posexplode在这里不是我的选择 请记住,它是一列列表,而不是一列单个项目 我在找像这样的

我有一个巨大的数据集问题,我正在寻找从2个列表删除相同的索引项

让我描述一个例子

想象一下,谷歌搜索页面上有12个URL。第一个是广告,最后一个也是,第二个和第七个是图片链接。现在我只想要有机的
链接

类型可以在列表中随机定位。我正在检查
array\u remove
,这很好,但是它只能从1个列表中删除特定的项,而且我还没有足够的能力来解决如何在2个列表中同时执行此操作。遗憾的是,数据集实在太大了,我恐怕
posexplode
在这里不是我的选择

请记住,它是一列列表,而不是一列单个项目

我在找像这样的东西

如果类型列表中有“adlink”或“picture”:
将其从类型列表中删除,并从URL列表中删除相同的索引项
期望输出:

  urls  |  type 
-----------------
[url3,  | [link,
 url4,  |  link,
 url5,  |  link, 
 url6,  |  link,
 url8,  |  link,
 url9,  |  link,
 url10, |  link,
 url11] |  link]
您可以像使用spark2.4一样使用更高阶的函数(因为您使用了数组)。首先,您可以使用
数组将数组压缩到一起,然后在
压缩数组(键入URL)
上使用
筛选出
类型为“adlink”和“picture”的位置,然后使用
ColumnName.arrayname
从压缩列中选择所需的列

过滤器
(高阶函数),基本上允许您对高阶数据应用过滤器,而无需对其进行分解(如您所述)。

数组\u zip
返回一个合并的结构数组,其中第N个结构包含输入数组的所有第N个值。


您好,谢谢您的回复,我在玩您的代码一点,我无法解决一个问题(可能是SQL知识的lact)-如果我在URL中有一个空列表,我如何处理它?给我java.lang.NullPointerException。了解它与从列表中读取有关,如果列表为空-这将导致此错误-最有可能的是expr(filter..)@Leemosh如果URL中有空列表,是否希望保留该行?我想我解决了.filter(size('type_url')>0)的问题,但无论如何,谢谢!
  urls  |  type 
-----------------
[url3,  | [link,
 url4,  |  link,
 url5,  |  link, 
 url6,  |  link,
 url8,  |  link,
 url9,  |  link,
 url10, |  link,
 url11] |  link]
df.show()#your dataframe
+---------------------------------------------------------------------------+----------------------------------------------------------------------------------+
|urls                                                                       |type                                                                              |
+---------------------------------------------------------------------------+----------------------------------------------------------------------------------+
|[url1, url2, url3, url4, url5, url6, url7, url8, url9, url10, url11, url12]|[adlink, picture, link, link, link, link, picture, link, link, link, link, adlink]|
+---------------------------------------------------------------------------+----------------------------------------------------------------------------------+ 
from pyspark.sql import functions as F
df.withColumn("type_urls", F.arrays_zip(F.col("urls"),F.col("type"))).select("type_urls")\
  .withColumn("urls1", F.expr("""filter(type_urls, x-> x.type!='adlink' and x.type!='picture')"""))\
  .select(F.col("urls1.urls"), F.col("urls1.type")).show(truncate=False)

+--------------------------------------------------+------------------------------------------------+
|urls                                              |type                                            |
+--------------------------------------------------+------------------------------------------------+
|[url3, url4, url5, url6, url8, url9, url10, url11]|[link, link, link, link, link, link, link, link]|
+--------------------------------------------------+------------------------------------------------+