当前位置: 首页 > 知识库问答 >
问题:

无法访问pyspark中的本地文件

计阳泽
2023-03-14
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')('inputfile name:',[U'empfile1.csv'])('input file path:',U'/H/TMP/Spark-76BDBD48-CBB4-4E8F-971A-383B899F79B0/Userfiles-EE6DCD-B320-433B-8491-31927C75FE 27C75FE2/empfile1.csv')回溯(最近的调用为last):文件“/u/user/vikrant/testdata/pysparkmainmodulenew.py”,第57行,在main()文件“/u/user/vikrant/testdata/pysparkmainmodulenew.py”中,第31行,在main data=processfiledata(spark,inputfilename)文件“/u/user/vikrant/testdata/pysparkmainmodulenew.py”中,第53行,在processfiledata current/spark2-client/python/lib/pyspark.zip/pyspark/sql/readwriter.py“,第166行,加载文件”/usr/hdp/current/spark2-client/python/lib/pyspark/zip/pyspark/sql/readwriter.py“,第1160行,调用文件”/usr/hdp/current/spark2-client/python/lib/pyspark/sql/utils.py“,第6行9,在deco pyspark.sql.utils.analysisException:U'路径不存在:hdfs://hdd2cluster/h/tmp/spark-76bdbd48-cbb4-4e8f-971a-383b899f79b0/userfiles-ee6dcdec-b320-433b-8491-311927c75fe2/empfile1.csv;‘

共有1个答案

冯庆
2023-03-14

你有这样的东西。这是行不通的,因为您需要在--files选项之后放置pysparkmainmodulenew.py。所以,这个

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
 类似资料:
  • 谢谢大家 我的代码:

  • 问题内容: 这是问题的一个简单示例: myStyle.css 如果要使用脚本,效果很好 解决方案: 1.在文件在线/本地主机时工作 2.在其他浏览器(例如Internet Explorer,Microsoft Edge,Firefox)下工作 3. chrome –allow-file-access-from-files 问题答案: TL; DR:从Chrome 64开始,您需要使用本地开发服务器

  • 问题内容: 就像标题所说的那样,我正在尝试使用jQuery AJAX调用或访问本地HTML文件来访问(POST)。我无法正常工作。 我做了Google,在这里也看到了几个问题,但无法正常工作。我需要一些帮助。到目前为止,这是我尝试过的。 dataType:jsonp crossDomain:正确 在响应中设置标题: response.setHeader(“Access-Control-Allow-

  • 本文向大家介绍Android访问assets本地json文件的方法,包括了Android访问assets本地json文件的方法的使用技巧和注意事项,需要的朋友参考一下 目的:当App中用到固定的json数据时,如:国家城市列表、班级成员等时,可以将json数据制作为本地json文件存入assets文件夹下。 步骤如下: 1、新建assets文件夹,并将json文件复制到此文件夹中 在main文件夹

  • 问题内容: 我是angularjs的新手,我整天都在网上进行搜索,目的是找到一种解决方案,可以从本地json文件获取数据,而不必在我的webapp中使用本地主机。不幸的是,我还没有找到任何东西。我尝试使用$http.get,但收到Cross Origin *错误。 有没有其他方法可以从本地json文件中获取数据而不必在本地托管我的webapp? angularjs是否有其他功能可以从本地json文

  • 我正在尝试使用以下代码打开一个文本文件: 此代码导致此错误(第69行是FileReader初始化): 这是我的文件系统的样子:这里 感谢任何和所有帮助!