Apache spark 在spark本地模式下从内部工作者写入文件不会';你不会写吗?
为了在纱线集群中运行之前在pyspark中进行应用程序开发,我想在本地模式下对其进行测试。为此,我需要从worker节点内部显式地写入一些数据,我认为在集群模式下运行时,可以使用hadooprestapi将文件写入hdfs。但是,在本地模式下运行代码时,如何从辅助任务内部写入文件 例如:-Apache spark 在spark本地模式下从内部工作者写入文件不会';你不会写吗?,apache-spark,pyspark,Apache Spark,Pyspark,为了在纱线集群中运行之前在pyspark中进行应用程序开发,我想在本地模式下对其进行测试。为此,我需要从worker节点内部显式地写入一些数据,我认为在集群模式下运行时,可以使用hadooprestapi将文件写入hdfs。但是,在本地模式下运行代码时,如何从辅助任务内部写入文件 例如:- sparkConf = SparkConf().setAppName("testing").setMaster("local[*]") sc= SparkContext(conf=sparkConf)
sparkConf = SparkConf().setAppName("testing").setMaster("local[*]")
sc= SparkContext(conf=sparkConf)
rdd = sc.textFile("file://path to file")
rdd.map(lambda x:x.split("\t")[0],1).reduce(func_to_reduce);
def func_to_reduce(a,b):
//how can i write value of a and b to a file from here
return a+b;
澄清一下:如果我从驱动程序端代码中使用open()方法写入文件,它是有效的,但是如果我从reduce函数中使用相同的方法写入文件,它就不起作用。非常感谢您的指导和帮助 您必须实际调用save方法,就像您通过
textFile
调用load方法一样。类似于savastextfile(path)
的内容请参见rdd.reduce(f)
soucre代码
Spark在使用rdd.reduce()
时调用python内置函数reduce
两次:一次通过rdd.mapPartitions()
在worker节点中,另一次在驱动程序节点中,在rdd.collect()之后
因此,您不能在rdd.reduce
函数中写入数据
似乎您想将数据保存在工作节点的本地路径上?好吧,我之所以提出这个问题,是因为使用操作系统模块创建目录,而使用open()方法写入文件,但在reduceByKey()函数中没有起作用。当我在本地模式下运行时,我假设它应该可以访问驱动程序的本地路径,并像运行普通python脚本一样执行这些功能。之所以不是这样,是因为我完全忘记了这样一个事实,即reduceByKey更像是一个转换,而不是一个动作,因为reduceByKey()中的代码实际上并没有按照Spark的惰性求值设计运行。因此,我使用collect()对该引用调用了一个操作。现在它启动了reduce功能,并且可以很好地编写文件。谢谢大家的帮助 很抱歉,您到底想在哪里写入文件?@JoeC我正在比较这两个值,根据分析,我需要将一些新数据写入csv文件。我不想将我的缩减结果保存到文件中。我试图从reduce函数中显式地写入一些数据,这样即使在spark中作业结束之前也可以写入文件。希望这是有道理的。我知道这不是spark设计的目的,但我必须为我的应用程序这样做。不,我想将数据保存在驱动程序节点的本地路径中。无论如何,因为我是在本地模式下运行作业,所以它将是相同的文件系统?这清楚吗?