zoukankan      html  css  js  c++  java
  • Pyspark中遇到的 java.io.IOException: Not a file 和 pyspark.sql.utils.AnalysisException: 'Table or view not found

    最近执行pyspark时,直接读取hive里面的数据,经常遇到几个问题:

    1.  java.io.IOException: Not a file —— 然而事实上文件是存在的,是 hdfs 的默认路径出了错,需要配置 --files 和 --conf。

    2. pyspark.sql.utils.AnalysisException: 'Table or view not found —— 事实上在hive里面是存在这个表的,但是却显示找不到。

    3. org.apache.spark.sql.catalyst.analysis.NoSuchDatabaseException: Database 'XXXXX' not found; —— 直接显示数据库找不到,是因为没有配置enableHiveSupport(),例如需要设置:spark = SparkSession.builder.master("local").appName("SparkOnHive").enableHiveSupport().getOrCreate()

    出现这些问题的原因:

    在我这里测试的是hive配置以及spark-submit提交作业时参数未设置造成。

    # 以下测试通过
    import os
    # from pyspark import SparkContext, SparkConf
    from pyspark.sql.session import SparkSession
    from pyspark.sql import HiveContext
    import sys
    
    os.environ["PYSPARK_PYTHON"]="/usr/bin/python3"
    
    spark = SparkSession.builder.master("local").appName("SparkOnHive").enableHiveSupport().getOrCreate() #必须配置 enableHiveSupport
    hive_text = HiveContext(spark)
    print(sys.getdefaultencoding())
    
    hive_text.sql('use default')  #选择数据库名
    data_2 = hive_text.sql("select * from word_test") #执行查询语句
    #data_2 = hive_text.sql("select * from test_table_words")
    data_3 = data_2.select("first_column_name").collect() #选择表中的某一列,或某几列,需要输入列名
    
    print(data_3[0][0])
    
    print(data_2.collect()[0])   
    print(data_2.collect()[0][0]) 
    print("------ finished ------")

    以上代码保存为:test.py

    在命令行或者shell执行时,需要使用:

    spark-submit --files /opt/spark/spark-2.1.1-bin-hadoop2.7/conf/hive-site.xml --conf spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive=true test.py

    其中:

    --files:用于添加hive配置文件,首先注意的是:你的hadoop、spark、hive等都是安装配置好的,建议安装spark_with_hive之类已经编译好的spark。

    --conf:一个关键配置,这个配置还在学习中

    在上述方法执行成功后,第二次执行时发现:spark-submit --files /opt/spark/spark-2.1.1-bin-hadoop2.7/conf/hive-site.xml test.py 也可以直接执行了,有点懵,可能在hive-site.xml中设置了--conf,还在继续学习中。

    注意:此时并不需要在代码里面设置spark.sql.warehouse.dirconfig("spark.sql.warehouse.dir", some_path)

  • 相关阅读:
    求取32位无符号整数中最低位位值为1的位置 && 求取32位无符号整数中最高位位值为1的位置
    交换寄存器中的相应字段
    NDK与JNI
    plt_0
    32位无符号整数平方根
    提取 主 设备号
    爱江山更爱美人
    mysql oracle sqlserver 数据库分页
    详解JDBC驱动的四种类型
    oracle sqlplus 中的清屏命令
  • 原文地址:https://www.cnblogs.com/qi-yuan-008/p/12057350.html
Copyright © 2011-2022 走看看