【发布时间】:2017-10-02 11:31:21
【问题描述】:
我有许多小文件。我想将它们加载到 RDD 中。然后映射它们以在这些文件上并行执行算法。该算法将需要从 HDFS/Hive 表中获取数据。当我使用 SparkSQL 获取数据时,出现以下错误:
pickle.PicklingError:无法序列化对象:异常:它 似乎您正试图从 广播变量、动作或转换。 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."
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql