【问题标题】:SparkSession initialization error - Unable to use spark.readSparkSession 初始化错误 - 无法使用 spark.read
【发布时间】:2018-04-04 23:28:33
【问题描述】:

我尝试创建一个独立的 PySpark 程序,该程序读取 csv 并将其存储在 hive 表中。我在配置 Spark 会话、会议和上下文对象时遇到问题。这是我的代码:

from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext, SparkSession
from pyspark.sql.types import *

conf = SparkConf().setAppName("test_import")
sc = SparkContext(conf=conf)
sqlContext  = SQLContext(sc)

spark = SparkSession.builder.config(conf=conf)
dfRaw = spark.read.csv("hdfs:/user/..../test.csv",header=False)

dfRaw.createOrReplaceTempView('tempTable')
sqlContext.sql("create table customer.temp as select * from tempTable")

我得到了错误:

dfRaw = spark.read.csv("hdfs:/user/../test.csv",header=False) AttributeError: 'Builder' 对象没有属性'read'

为了使用 read.csv 命令,配置 spark 会话对象的正确方法是什么?另外,有人能解释一下 Session、Context 和 Conference 对象之间的区别吗?

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql apache-spark-2.0


    【解决方案1】:

    不需要同时使用SparkContextSparkSession 来初始化Spark。 SparkSession 是较新的推荐使用方式。

    要初始化您的环境,只需执行以下操作:

    spark = SparkSession\
      .builder\
      .appName("test_import")\
      .getOrCreate()
    

    您可以通过以下方式运行 SQL 命令:

    spark.sql(...)
    

    在 Spark 2.0.0 之前,使用了三个单独的对象:SparkContextSQLContextHiveContext。根据您想要执行的操作和使用的数据类型,这些是单独使用的。

    随着 Dataset/DataFrame 抽象的引入,SparkSession 对象成为 Spark 环境的主要入口点。仍然可以通过首先初始化 SparkSession(比如在名为 spark 的变量中)然后执行 spark.sparkContext/spark.sqlContext 来访问其他对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2020-05-28
      相关资源
      最近更新 更多