无法访问pyspark

时间:2018-10-18 08:16:32

标签: apache-spark pyspark

我正在尝试在Yarn框架上以客户端模式读取本地文件。我也无法以客户端模式访问本地文件。

import os
import pyspark.sql.functions as F
from os import listdir, path

from pyspark import SparkConf, SparkContext

import argparse
from pyspark import SparkFiles
from pyspark.sql import SparkSession

def main():
    spark = SparkSession \
    .builder \
    .appName("Spark File load example") \
    .config("spark.jars","/u/user/someuser/sqljdbc4.jar") \
    .config("spark.dynamicAllocation.enabled","true") \
    .config("spark.shuffle.service.enabled","true") \
    .config("hive.exec.dynamic.partition", "true") \
    .config("hive.exec.dynamic.partition.mode", "nonstrict") \
    .config("spark.sql.shuffle.partitions","50") \
    .config("hive.metastore.uris", "thrift://******.hpc.****.com:9083") \
    .enableHiveSupport() \
    .getOrCreate()

    spark.sparkContext.addFile("/u/user/vikrant/testdata/EMPFILE1.csv")


    inputfilename=getinputfile(spark)
    print("input file path is:",inputfilename)
    data = processfiledata(spark,inputfilename)
    data.show()
    spark.stop()

def getinputfile(spark):

    spark_files_dir = SparkFiles.getRootDirectory()
    print("spark_files_dir:",spark_files_dir)
    inputfile = [filename
                   for filename in listdir(spark_files_dir)
                   if filename.endswith('EMPFILE1.csv')]
    if len(inputfile) != 0:
        path_to_input_file = path.join(spark_files_dir, inputfile[0])
    else:
        print("file path not found",path_to_input_file)

    print("inputfile name:",inputfile)
    return path_to_input_file


    def processfiledata(spark,inputfilename):

        dataframe= spark.read.format("csv").option("header","false").load(inputfilename)
        return dataframe

if __name__ == "__main__":
     main()

Below is my shell script-->
    spark-submit --master yarn --deploy-mode client PysparkMainModulenew.py --files /u/user/vikrant/testdata/EMPFILE1.csv

下面是错误消息->

  

('spark_files_dir:',   u'/ h / tmp / spark-76bdbd48-cbb4-4e8f-971a-383b899f79b0 / userFiles-ee6dcdec-b320-433b-8491-311927c75fe2')       (“输入文件名:”,[u'EMPFILE1.csv'])       ('输入文件路径为:',u'/ h / tmp / spark-76bdbd48-cbb4-4e8f-971a-383b899f79b0 / userFiles-ee6dcdec-b320-433b-8491-311927c75fe2 / EMPFILE1.csv')       追溯(最近一次通话):         在第57行的文件“ /u/user/vikrant/testdata/PysparkMainModulenew.py”           主要()         主目录中的文件“ /u/user/vikrant/testdata/PysparkMainModulenew.py”,第31行           数据= processfiledata(火花,输入文件名)         在processfiledata中,文件“ /u/user/vikrant/testdata/PysparkMainModulenew.py”,第53行           dataframe = spark.read.format(“ csv”)。option(“ header”,“ false”)。load(inputfilename)         文件“ /usr/hdp/current/spark2-client/python/lib/pyspark.zip/pyspark/sql/readwriter.py”,   166行,在负载         文件“ /usr/hdp/current/spark2-client/python/lib/py4j-0.10.6-src.zip/py4j/java_gateway.py”,   第1160行,在致电         文件“ /usr/hdp/current/spark2-client/python/lib/pyspark.zip/pyspark/sql/utils.py”,   第69行,在装饰pyspark.sql.utils.AnalysisException中:u'Path不   存在:   hdfs://hdd2cluster/h/tmp/spark-76bdbd48-cbb4-4e8f-971a-383b899f79b0/userFiles-ee6dcdec-b320-433b-8491-311927c75fe2/EMPFILE1.csv;'

4 个答案:

答案 0 :(得分:0)

您的默认路径可能是HDFS主路径,因此,要从本地计算机获取文件,您必须在路径中添加file://

df=spark.read.format("csv").option("header","false").load("file:///home/inputfilename")

答案 1 :(得分:0)

您只能在“本地”模式下读取本地文件。如果您无法在“纱线”模式下读取本地文件,则该文件必须存在于所有数据节点上,这样,当在任何数据节点上启动容器时,该文件将可用于该数据节点上的容器。

恕我直言,总是能更好地提及您正在使用的技术堆栈版本和Hadoop发行版,以获得快速的帮助。

答案 2 :(得分:0)

您有类似这样的内容。这将不起作用,因为您需要在PysparkMainModulenew.py选项之后放置--files。所以,这

spark-submit --master yarn --deploy-mode client PysparkMainModulenew.py --files /u/user/vikrant/testdata/EMPFILE1.csv

应该是

spark-submit --master yarn --deploy-mode client --files /u/user/vikrant/testdata/EMPFILE1.csv PysparkMainModulenew.py

而且,在这种情况下,无需使用addFile。您可以将PysparkMainModulenew.pyEMPFILE1.csv复制到同一文件夹。并且,所有内容都应在--files选项之后。

spark-submit --master yarn --deploy-mode client --files /u/user/vikrant/testdata/EMPFILE1.csv /u/user/vikrant/testdata/PysparkMainModulenew.py

或者,您也可以使用--py-files选项。

答案 3 :(得分:0)

df = sqlContext.read.format(“ csv”).option(“ header”,“ true”).load(file:/// home / inputfilename)