如何在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)
答案 0 :(得分:-1)
你的功能似乎很奇怪。您正在传递一个参数log_line,它根本不在您的函数中使用。也像zero323所说的那样,在地图转换中使用嵌套操作是没有意义的。我建议再次重写这个功能。