Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark:使用数据位置感知并行化hdfs URL_Apache Spark_Pyspark_Pyhdfs Client - Fatal编程技术网

Apache spark Spark:使用数据位置感知并行化hdfs URL

Apache spark Spark:使用数据位置感知并行化hdfs URL,apache-spark,pyspark,pyhdfs-client,Apache Spark,Pyspark,Pyhdfs Client,我有一个HDFS zip文件URL列表,我想在RDD映射函数中打开每个文件,而不是使用binaryFiles函数 最初,我尝试如下: def unzip(hdfs_url): # read the hdfs file using hdfs python client rdd = spark.sparkContext.parallelize(list_of_hdfs_urls, 16) # make 16 partitions rdd.map(lambda a: unzip(a)) 但后

我有一个HDFS zip文件URL列表,我想在RDD映射函数中打开每个文件,而不是使用binaryFiles函数

最初,我尝试如下:

def unzip(hdfs_url):
  # read the hdfs file using hdfs python client

rdd = spark.sparkContext.parallelize(list_of_hdfs_urls, 16) # make 16 partitions
rdd.map(lambda a: unzip(a)) 
但后来我意识到,这不会给出数据的位置,即使它在集群中并行运行

有没有办法在hdfs文件
x
所在的节点上运行文件url
x
的映射功能,以及如何让spark知道此位置


我希望以这种方式读取zip文件,以便在pyspark中获得更好的性能,因此我可以避免每个执行器上python和java进程之间的文件序列化和反序列化。

希望此链接可能有用。您是否在压缩时使用容器格式?指Avro、SequenceFile或Parquet@VB_没有zip文件包含XML文件请注意文件的可拆分性。gzip+xml意味着文件中的数据是不可拆分的,必须一次全部解压缩。例如,如果HDFS块大小为128 MB,文件大小为1 GB,则文件将拆分为8个块。但您不能在8个辅助进程之间并行处理该文件,因为所有8个块都应该一次全部解压缩(由单个辅助进程进行),在大多数情况下,建议选择可拆分压缩算法(即LZO)或不可拆分压缩算法与容器数据格式(即Avro、SequentialFile或Parquet)结合使用。任何容器数据格式都是可拆分的。例如,使用Snappy压缩的拼花地板文件将是可拆分的。因此,8名工人可以同时读取1GB的拼花地板文件