【问题标题】:Substitute a variable's value in PySpark lambda function在 PySpark lambda 函数中替换变量的值
【发布时间】:2017-04-24 13:18:04
【问题描述】:

我应该如何在 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 函数?

【问题讨论】:

    标签: python apache-spark lambda pyspark apache-spark-sql


    【解决方案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)))
    

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 1970-01-01
      • 2018-03-11
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多