我正在尝试将CSV文件加载到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
有人可以帮我解决这个错误吗?
答案 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")