将CSV文件读入Spark

时间:2015-10-04 14:38:45

标签: csv hadoop apache-spark hdfs

我正在尝试将CS​​V文件加载到HDFS中,并将其作为RDD读取到Spark中。我正在使用Hortonworks Sandbox并通过命令行尝试这些。我按如下方式加载数据:

hadoop fs -put data.csv /

数据似乎已正确加载,如以下命令所示:

[root@sandbox temp]# hadoop fs -ls /data.csv
-rw-r--r--   1 hdfs hdfs   70085496 2015-10-04 14:17 /data.csv

在pyspark中,我尝试按如下方式阅读此文件:

data = sc.textFile('/data.csv')

但是,以下take命令会引发错误:

data.take(5)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/hdp/2.3.0.0-2557/spark/python/pyspark/rdd.py", line 1194, in take
    totalParts = self._jrdd.partitions().size()
  File "/usr/hdp/2.3.0.0-2557/spark/python/lib/py4j-0.8.2.1- src.zip/py4j/java_gateway.py", line 538, in __call__
  File "/usr/hdp/2.3.0.0-2557/spark/python/lib/py4j-0.8.2.1-src.zip/py4j/protocol.py", line 300, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o35.partitions.
: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/data.csv

有人可以帮我解决这个错误吗?

3 个答案:

答案 0 :(得分:2)

我想出了答案。我必须输入HDFS文件的完整路径名,如下所示:

data = sc.textFile('hdfs://sandbox.hortonworks.com:8020/data.csv')

完整路径名从conf / core-site.xml

获取

答案 1 :(得分:0)

错误org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/data.csv

它是从您本地文件系统而不是hdfs读取。

尝试提供如下文件路径

data = sc.textFile("hdfs://data.csv")

答案 2 :(得分:0)

如果要为本地系统中可用的任何文本或csv文件创建rdd,请使用

rdd = sc.textFile("file://path/to/csv or text file")