我有这样一篇《spark 源》专栏:

                   gm_array
[[1, 4, 6,...], [2, 7, 8,...], [3, 5, 7,...],...]
[[8, 11, 9,...], [7, 2, 6,...], [10, 9, 8,...],...]
[[90, 13, 67,...], [55, 6, 98,...], [1, 6, 2,...],...]
.
.

现在我想把这个数组和数组中的数组混合在一起,然后从前5个数组中选取5个第一个元素.

第一个输出是随机洗牌数组:

                  gm_array
[[19, 6, 1,...], [9, 80, 5,...], [30, 7, 3,...],...]
[[7, 9, 11,...], [6, 8, 7,...], [18, 7, 10,...],...]
[[90, 1, 7,...], [8, 9, 81,...], [6, 5, 1,...],...]
.
.

主数组内前5个数组的第2个输出1个元素:

[19, 9, 30,...]
[7, 6, 18,...]
[[90, 8, 6,...]
.
.

推荐答案

使用一些数组和高阶函数,您可以执行以下操作:

import random
from pyspark.sql import functions as F

# example of input dataframe
df = spark.createDataFrame(
    [
        ([[random.randint(1, 100) for _ in range(5)] for _ in range(6)],)
        for _ in range(4)
    ],
    ["gm_array"]
)

# first step: shuffle arrays
df_shuffled = df.withColumn(
    "gm_array",
    F.shuffle(F.transform("gm_array", lambda x: F.shuffle(x)))
)

# second step: pick top 5 elements
df_top_5 = df_shuffled.withColumn(
    "gm_array",
    F.transform(F.slice("gm_array", 1, 5), lambda x: x[0])
)

df_top_5.show(truncate=False)
#+--------------------+
#|gm_array            |
#+--------------------+
#|[77, 44, 6, 23, 100]|
#|[40, 57, 10, 32, 27]|
#|[3, 45, 17, 9, 9]   |
#|[62, 39, 10, 95, 17]|
#+--------------------+

Python相关问答推荐

从webhook中的短代码(而不是电话号码)接收Twilio消息

Pandas 滚动最接近的价值

如何根据参数推断对象的返回类型?

如何标记Spacy中不包含特定符号的单词?

在Python 3中,如何让客户端打开一个套接字到服务器,发送一行JSON编码的数据,读回一行JSON编码的数据,然后继续?

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

Odoo16:模板中使用的docs变量在哪里定义?

比Pandas 更好的 Select

不允许 Select 北极滚动?

数据框,如果值在范围内,则获取范围和

如何在Python中将超链接添加到PDF中每个页面的顶部?

如何在Gekko中处理跨矢量优化

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

每次查询的流通股数量

有没有一种方法可以在朗肯代理中集成向量嵌入

如何关联来自两个Pandas DataFrame列的列表项?

在MongoDB文档中仅返回数组字段

关于数字S种子序列内部工作原理的困惑

如何通过函数的强式路径动态导入函数?

如何在微调Whisper模型时更改数据集?