gpt4 book ai didi

lambda - spark 映射中的 lambda 表达式中的 * 是什么意思?

转载 作者:行者123 更新时间:2023-12-01 12:31:36 24 4
gpt4 key购买 nike

LabeledDocument = Row("id", "text", "label")
sc.parallelize([(0, "a b c d e spark", 1.0),
(1, "b d", 0.0),
(2, "spark f g h", 1.0),
(3, "hadoop mapreduce", 0.0)]) \
.map(lambda x: LabeledDocument(*x)).first()

这段代码会给出类似

的输出

Row(id=0, text='a b c d e spark', label=1.0)

但是如果你在 lambda 表达式中省略 * 即

sc.parallelize([(0, "a b c d e spark", 1.0),
(1, "b d", 0.0),
(2, "spark f g h", 1.0),
(3, "hadoop mapreduce", 0.0)]) \
.map(lambda x: LabeledDocument(x)).first()

你会得到这样的输出

Row(id=(0, 'a b c d e spark', 1.0))

有人能告诉我 * 在分隔元组和分配给行的每一列时是如何工作的吗?

最佳答案

x = [1, 2, 3]
print(x)
# => [1, 2, 3]
print(*x)
# => 1 2 3 # equivalent to print(1, 2, 3)

*x 会将列表(或元组)x 分配到单独的参数中。

以同样的方式,LabeledDocument(x) 等于 LabeledDocument((0, "a b c d e spark", 1.0))(带有一个元组参数);但是 LabeledDocument(*x) 等于 LabeledDocument(0, "a b c d e spark", 1.0)(具有三个参数:一个数字、一个字符串和一个数字)。

在 Ruby 中,它被称为“a splat”,因为星号 (*) 看起来像一个 splat,因为它将列表拼成函数参数,反之亦然。在 Python 社区中,我不确定它是否有一个公认的名称。

详见Python docs .

关于lambda - spark 映射中的 lambda 表达式中的 * 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33795526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com