我有以下的PySpark数据帧

A
1001
1110
1000

我希望找到本专栏中1的所有匹配项,并以如下方式将其放入新的专栏中:

A Occurrences
1001 0,3
1110 0,1,2
1000 0

我try 了locate函数,如下所示:

from pyspark.sql import functions as F
dfa_occ = dfa.withColumn('Occurrences', F.locate('1', (F.col('A'))-1) )

然而,这只提取了第一个出现的1,而我需要找到他们所有的!

推荐答案

您可以try posexplode,并将聚合结果返回到一个列表中.本例中的split将字符串拆分成字母.

from pyspark.sql import functions as F
df = spark.createDataFrame([('1001',), ('1110',), ('1000',)], ['A'])

df = (df
    .select('*', F.posexplode(F.split('A', '(?!$)')))
    .filter('col = 1')
    .groupBy('A')
    .agg(F.collect_list('pos').alias('Occurrences'))
)
df.show()
# +----+-----------+
# |   A|Occurrences|
# +----+-----------+
# |1001|     [0, 3]|
# |1000|        [0]|
# |1110|  [0, 1, 2]|
# +----+-----------+

Python相关问答推荐

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

修复mypy错误-赋值中的类型不兼容(表达式具有类型xxx,变量具有类型yyy)

如何在Python脚本中附加一个Google tab(已经打开)

当独立的网络调用不应该互相阻塞时,'

如何在WSL2中更新Python到最新版本(3.12.2)?

在vscode上使用Python虚拟环境时((env))

Odoo 16使用NTFS使字段只读

名为__main__. py的Python模块在导入时不运行'

matplotlib + python foor loop

手动设置seborn/matplotlib散点图连续变量图例中显示的值

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

为什么t sns.barplot图例不显示所有值?'

如何在信号的FFT中获得正确的频率幅值

为罕见情况下的回退None值键入

如何获取包含`try`外部堆栈的`__traceback__`属性的异常

如何获取给定列中包含特定值的行号?

使用pythonminidom过滤XML文件

将标签与山脊线图对齐

如何在Django查询集中生成带有值列表的带注释的字段?