如何在 pyspark 中的 for 循环中映射行的单列值


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)

相关内容

  • 没有找到相关文章

最新更新