我有很多小文件。我想在RDD中加载它们。然后映射它们以并行地对这些文件执行算法。该算法将需要从HDFS / Hive表中获取数据。当我使用SparkSQL获取数据时,我得到以下错误:
pickle.PicklingError:无法序列化对象:异常:它 似乎你试图从一个引用SparkContext 广播变量,动作或转换。 SparkContext只能 用于驱动程序,而不是在工作程序上运行的代码中。更多 信息,请参阅SPARK-5063。
SparkSQL使用SQLContext,它是SparkContext的包装器。这是否意味着我不能在工作人员执行的代码中使用SparkSQL?但那时,它太有限了。
有人可以分享一些关于如何在PySpark中编写逻辑的知识吗?
以下是我正在使用的示例PySpark代码:
def apply_algorithm(filename):
/* SparkSQL logic goes here */
/* some more logic */
return someResult
def main(argv):
print "Entered main method"
input_dir = sys.argv[1]
output_dir = sys.argv[2]
fileNameContentMapRDD = sc.wholeTextFiles(input_dir)
print "fileNameContentMapRDD = " , fileNameContentMapRDD.collect()
resultRDD = fileNameContentMapRDD.map(lambda x : apply_algorithm(x[0]))
print resultRDD.collect()
print "end of main."
答案 0 :(得分:2)
这是否意味着我不能在工作人员执行的代码中使用SparkSQL?
是的,这意味着这一点。您不能在并行化的上下文中使用RDDs
和DataFrames
。