我试图做这样的事情
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上运行的代码中使用
答案 0 :(得分:0)
问题是(正如错误消息中明确指出的那样)您正试图在地图中使用RDD。文件是RDD。它可以在其上进行各种转换(例如,您正尝试在其上执行本地迭代器)。但是你试图在另一个内部使用转换 - 地图。
<强>更新强>
如果我理解正确,您的数据框df带有列URL。您还有一个包含黑名单值的文本文件。 让我们假设你的黑名单文件是一个带有blacklistNames列的csv,并且已经解析了dataframe df的URL列。即,您只想检查URL是否在blacklistNames列中。
你可以做的是这样的事情:
df.join(blackListDF, df["URL"]==blackListDF["blacklistNames"], "left_outer")
此连接基本上将blacklistNames列添加到原始数据框中,如果它在黑名单中,则包含匹配的名称,否则为null。现在,您需要做的就是根据新列是否为空来进行过滤。