Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.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
Python 如何获取csv文件的子集作为Spark RDD_Python_Csv_Apache Spark - Fatal编程技术网

Python 如何获取csv文件的子集作为Spark RDD

Python 如何获取csv文件的子集作为Spark RDD,python,csv,apache-spark,Python,Csv,Apache Spark,我是Spark的新手,正在尝试读取csv文件并获取文件中的第一列和第二列。但问题是csv文件很大,我对解析csv文件中的每一行都不感兴趣。此外,运行collect()函数可能会使进程崩溃,因为内存可能不足以支持返回的数据量。所以我想知道是否有可能只使用csv数据的一个子集创建RDD。例如,是否可以生成包含csv文件第10到1000行的RDD,而忽略其他行 现在,我所拥有的只是 csvdata = sc.textFile("hdfs://nn:port/datasets/sample.csv").

我是Spark的新手,正在尝试读取csv文件并获取文件中的第一列和第二列。但问题是csv文件很大,我对解析csv文件中的每一行都不感兴趣。此外,运行collect()函数可能会使进程崩溃,因为内存可能不足以支持返回的数据量。所以我想知道是否有可能只使用csv数据的一个子集创建RDD。例如,是否可以生成包含csv文件第10到1000行的RDD,而忽略其他行

现在,我所拥有的只是

csvdata = sc.textFile("hdfs://nn:port/datasets/sample.csv").map(lambda line: line.split(","))
这基本上为整个csv文件创建了RDD。是否可以从仅包含第10行到第1000行的csvdata创建RDD


非常感谢您提供的帮助。

您可以加载全部并按索引进行筛选:

rdd = sc.parallelize(range(0, -10000, -1))
rdd.zipWithIndex().filter(lambda kv: 9 <= kv[1] < 999).keys()
rdd=sc.parallelize(范围(0,-10000,-1))

rdd.zipWithIndex().filter(lambda kv:9rdd不是存储在内存中的数据,它的目的是对某些数据进行处理。当调用终端操作时,例如“collect”或“reduce”,然后Spark处理数据。Spark在引擎盖下进行了一些巧妙的优化,根据您在RDD上的操作历史,限制了它必须完成的工作量

(通过调用RDD上的一些操作,而不是调用终端操作,自己尝试一下。什么都不会发生!)

因此,您可以这样做,例如(这是Scala,但与python没有太大区别)


Spark会知道,由于
take(10)
,您只需要前10行。因此它只需要文件中的10行!很简单。

这是有效的。我需要在您对textFile()的回答中替换parallelize()函数,它就起了作用。非常感谢。如果您对数据运行基于reduce的转换,这将不会有用(像reduceByKey)在这种情况下,zero323的答案更好。
val first10results: Array[Array[String]] = sc.textFile(filePath)
      .map(f => f.split(","))
      .take(10)