spark - 使用显式自我错误调用未绑定方法

时间:2016-01-12 01:33:03

标签: apache-spark pyspark

如何在Spark map()操作中传递python函数?

我想在所有调用中重用相同的sc,sqlCtx和df,但我得到使用显式自我错误调用未绑定方法

# initialize spark
conf = SparkConf().setAppName("spark script")
conf = conf.setMaster("local[*]")
sc = SparkContext(conf=conf, pyFiles=[os.path.realpath(__file__)])
sqlCtx = SQLContext(sc)
sqlCtx.setConf("spark.sql.parquet.binaryAstext","true")

df = sqlCtx.read.load(s3_url_to_parquet_file)
df.registerTempTable("temp_table")

def parse_line(log_line):
    dict_with_line_info = {}
    # ... parse operations

    id = df.filter(df["SessionKey"] == session_token).show()
    dict_with_line_info.update({"user_id":id})
    return dict_with_line_info

def main(log_line):
    s3_url_to_tar_file = "s3n://....."
    log = sc.textFile(s3_url_to_tar_file)
    return log.map(lambda log_line: parse_line(log_line)).collect()

if __name__ == '__main__':
    for log_line in log_text:
        main(x)

1 个答案:

答案 0 :(得分:-1)

你的功能似乎很奇怪。您正在传递一个参数log_line,它根本不在您的函数中使用。也像zero323所说的那样,在地图转换中使用嵌套操作是没有意义的。我建议再次重写这个功能。