我有一个巨大的数据集问题,我正在寻找从2个列表删除相同的索引项
让我描述一个例子
想象一下,谷歌搜索页面上有12个URL。第一个是广告,最后一个也是,第二个和第七个是图片链接。现在我只想要有机的
类型可以在列表中随机定位。我正在检查array_remove
,这很好,但它只能从1个列表中删除特定的项,而且我还没有足够的能力来解决如何同时为2个列表执行此操作。不幸的是,数据集真的很大,我恐怕posexplode
在这里不是我的选择
请记住,它是一列列表,而不是一列单个项目
我在找像这样的东西
if "adlink" or "picture" in typelist:
remove it from typelist and remove same indexed item from urls list
urls | type
-----------------
[url1, | [adlink,
url2, | picture,
url3, | link,
url4, | link,
url5, | link,
url6, | link,
url7, | picture,
url8, | link,
url9, | link,
url10, | link,
url11, | link,
url12] | adlink]
期望输出:
urls | type
-----------------
[url3, | [link,
url4, | link,
url5, | link,
url6, | link,
url8, | link,
url9, | link,
url10, | link,
url11] | link]
你可以使用
higher order functions
就像你使用spark2.4
一样(因为你使用了array_remove
,所以我能看出来)。首先,您可以使用arrays_zip
将数组压缩到一起,然后使用filter
上的zipped array(type_urls)
将过滤掉任何type is 'adlink' and 'picture'
,然后使用columname.arrayname
从压缩的列中选择所需的列Filter
(高阶函数),基本上允许您对高阶数据应用过滤器,而无需对其进行分解(正如您提到的posexplode)。 Higher order functionsarrays_zip
返回结构的合并数组,其中第N个结构包含输入数组的所有第N个值arrays_zip Pyspark API docs相关问题 更多 >
编程相关推荐