我应该如何在lambda函数中使用变量?
for a_name in name_field_names:
results = sqlContext.sql("SELECT * FROM noise_data")
stringsDS = results.map(lambda p:p.(a_name))
lambda函数期望我给出列的名称,而我给出一个变量。
我应该如何将a_name变量的值传递给lambda函数?
答案 0 :(得分:1)
要按名称从Row
获取变量,请使用括号表示法:
from pyspark.sql import Row
row = Row(a = "foo", b = "bar")
row["a"]
'foo'
或getattr
:
getattr(row, "b")
'bar'
您也可以跳过map
并使用select
:
sqlContext.sql("SELECT * FROM noise_data").select(a_name)
还记得Python后期绑定。在循环中调用的函数内使用闭包中的变量不是一个好主意。如果您想要map
,则应该将a_name
作为属性捕获,例如:
from operator import attrgetter
for a_name in name_field_names:
results = ...
results.rdd.map(attrgetter(a_name)))