Apache spark 从pyspark读取hdfs格式的文件

Apache spark 从pyspark读取hdfs格式的文件,apache-spark,hdfs,pyspark,Apache Spark,Hdfs,Pyspark,我正在尝试读取hdfs中的文件。下面是我的hadoop文件结构的展示 hduser@GVM:/usr/local/spark/bin$ hadoop fs -ls -R / drwxr-xr-x - hduser supergroup 0 2016-03-06 17:28 /inputFiles drwxr-xr-x - hduser supergroup 0 2016-03-06 17:31 /inputFiles/CountOfMonteCrist

我正在尝试读取hdfs中的文件。下面是我的hadoop文件结构的展示

hduser@GVM:/usr/local/spark/bin$ hadoop fs -ls -R /
drwxr-xr-x   - hduser supergroup          0 2016-03-06 17:28 /inputFiles
drwxr-xr-x   - hduser supergroup          0 2016-03-06 17:31 /inputFiles/CountOfMonteCristo
-rw-r--r--   1 hduser supergroup    2685300 2016-03-06 17:31 /inputFiles/CountOfMonteCristo/BookText.txt
这是我的Pypark代码:

from pyspark import SparkContext, SparkConf

conf = SparkConf().setAppName("myFirstApp").setMaster("local")
sc = SparkContext(conf=conf)

textFile = sc.textFile("hdfs://inputFiles/CountOfMonteCristo/BookText.txt")
textFile.first()
我得到的错误是:

Py4JJavaError: An error occurred while calling o64.partitions.
: java.lang.IllegalArgumentException: java.net.UnknownHostException: inputFiles
这是因为我的sparkContext设置不正确吗?我通过虚拟盒在ubuntu 14.04虚拟机上运行这个


我不确定我在这里做错了什么…

因为您没有提供权限URI,所以应该如下所示:

hdfs:///inputFiles/CountOfMonteCristo/BookText.txt
否则,
inputFiles
将被解释为主机名。如果配置正确,您根本不需要使用scheme:

/inputFiles/CountOfMonteCristo/BookText.txt

相反。

如果未提供配置,则可以通过完整路径访问HDFS文件。(如果HDFS位于本地环境中,则namenodehost是您的本地主机)


在Spark中有两种读取文件的通用方法,一种用于并行处理大型分布式文件,另一种用于读取查找表和HDF上的配置等小文件。对于后者,您可能希望将驱动程序节点或工作程序中的文件作为一次读取(而不是分布式读取)进行读取。在这种情况下,您应该使用如下所示的
SparkFiles
模块

# spark is a SparkSession instance
from pyspark import SparkFiles

spark.sparkContext.addFile('hdfs:///user/bekce/myfile.json')
with open(SparkFiles.get('myfile.json'), 'rb') as handle:
    j = json.load(handle)
    or_do_whatever_with(handle)
首先,你需要跑步

export PYSPARK_PYTHON=python3.4 #what so ever is your python version
代码

执行代码

spark-submit --master yarn --deploy-mode client <py file>
spark提交--主纱线--部署模式客户端

有没有办法设置节点主机的名称,这样就不会在python文件中硬编码?我们怎样才能最好地将其参数化?也许可以使用某种可以在多个应用程序之间共享的配置文件?
from pyspark.sql import SparkSession
from pyspark import SparkConf, SparkContext

spark = SparkSession.builder.appName("HDFS").getOrCreate()
sparkcont = SparkContext.getOrCreate(SparkConf().setAppName("HDFS"))
logs = sparkcont.setLogLevel("ERROR")

data = [('First', 1), ('Second', 2), ('Third', 3), ('Fourth', 4), ('Fifth', 5)]
df = spark.createDataFrame(data)

df.write.csv("hdfs:///mnt/data/")
print("Data Written")
spark-submit --master yarn --deploy-mode client <py file>