from pyspark.sql import HiveContext
hive_context = HiveContext(sc)
test = hive_context.table("dbname.tablename")
iterate = test.map(lambda p:(p.survey_date,p.pro_catg,p.metric_id))
for ite in iterate.collect() :
v = ite.map(lambda p:p.metric_id)
print (v)
上面的代码在 for 循环中给出错误。如何在不更改上述映射的情况下打印单列,因为我想进一步将代码编写为
for ite in iterate.collect():
for ite11 in secondtable.collect() :
if ite.metric_id.find(ite11.column1)
result.append(ite , ite11)
请任何人对此提供帮助
运行时出错的原因:
for ite in iterate.collect() :
v = ite.map(lambda p:p.metric_id)
iterate.collect() 的结果不是 RDD,它是一个 python 列表(或类似的东西)。
map
可以在RDD上执行,不能在python-list上执行。
一般来说,不建议在火花中使用collect()
以下内容应执行类似的操作而不会出错:
iterate = test.map(lambda p:(p.survey_date,p.pro_catg,p.metric_id))
v = iterate.map(lambda (survey_date,pro_catg,metric_id): metric_id)
print (v.collect())
最后,
我又得到了一个解决方案,可以将 for 循环中的单列值映射为
for ite in iterate.collect():
for itp in prod.collect():
if itp[0] in ite[1]: result.append(p)
print(result)
它工作正常。而不是in
我们可以将find
用作
if ite[1].find(itp[0]): result.append(p)