Ошибка инициализации SparkSession — невозможно использовать spark.read

Я попытался создать отдельную программу PySpark, которая считывает csv и сохраняет его в таблице кустов. У меня возникли проблемы с настройкой сеансов 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? Кроме того, может ли кто-нибудь объяснить разницу между объектами Session, Context и Conference?


person Michail N    schedule 24.10.2017    source источник


Ответы (1)


Нет необходимости использовать одновременно SparkContext и SparkSession для инициализации Spark. SparkSession — это более новый рекомендуемый способ использования.

Чтобы инициализировать вашу среду, просто выполните:

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

Вы можете запускать команды SQL, выполнив:

spark.sql(...)

До Spark 2.0.0 использовались три отдельных объекта: SparkContext, SQLContext и HiveContext. Они использовались отдельно в зависимости от того, что вы хотели сделать, и используемых типов данных.

С появлением абстракций Dataset/DataFrame объект SparkSession стал основной точкой входа в среду Spark. По-прежнему можно получить доступ к другим объектам, сначала инициализировав SparkSession (скажем, в переменной с именем spark), а затем выполнив spark.sparkContext/spark.sqlContext.

person Shaido    schedule 24.10.2017