如何迭代包含textFile的rdd的每一行

时间:2016-12-02 13:41:19

标签: python-2.7 apache-spark pyspark

我试图做这样的事情

file = sc.textFile('mytextfile')

def myfunction(mystring):
 new_value = mystring
 for i in file.toLocalIterator()
  if i in mystring:
   new_value = i
 return new_value;

rdd_row = some_data_frame.map(lambda u: Row(myfunction(u.column_name)))

但是我收到了这个错误

  

您似乎正在尝试从广播变量,操作或转换中引用SparkContext。 SparkContext只能在驱动程序上使用,而不能在它在worker上运行的代码中使用

1 个答案:

答案 0 :(得分:0)

问题是(正如错误消息中明确指出的那样)您正试图在地图中使用RDD。文件是RDD。它可以在其上进行各种转换(例如,您正尝试在其上执行本地迭代器)。但是你试图在另一个内部使用转换 - 地图。

<强>更新

如果我理解正确,您的数据框df带有列URL。您还有一个包含黑名单值的文本文件。 让我们假设你的黑名单文件是一个带有blacklistNames列的csv,并且已经解析了dataframe df的URL列。即,您只想检查URL是否在blacklistNames列中。

你可以做的是这样的事情:

df.join(blackListDF, df["URL"]==blackListDF["blacklistNames"], "left_outer")

此连接基本上将blacklistNames列添加到原始数据框中,如果它在黑名单中,则包含匹配的名称,否则为null。现在,您需要做的就是根据新列是否为空来进行过滤。