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()
此代码将给出类似的输出
行(id = 0,文字='abcde spark',标签= 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()
您将获得输出为
行(id =(0,'abcde spark',1.0))
有人可以告诉我*如何分隔元组并分配给Row的每一列吗?
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中,由于星号(*
)看起来像splat,并且将列表作为函数参数列表,反之亦然,因此称为“ splat” 。在Python社区中,我不确定它是否具有约定的名称。
在Python文档中详细阅读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句