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)
请帮忙解决这个问题
答案 0 :(得分:0)
运行时出错的原因:
for ite in iterate.collect() :
v = ite.map(lambda p:p.metric_id)
iterate.collect()的结果不是RDD,它是一个python列表(或类似的东西)。
map
可以在RDD上执行,不能在python-list上执行。
一般情况下,{@ 1}}不建议在spark
中使用以下应该执行类似的操作而不会出错:
collect()
答案 1 :(得分:0)
最后我得到了另一个解决方案,将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)