2017-10-24 93 views
5

Próbowałem utworzyć samodzielny program PySpark, który odczytuje csv i zapisuje go w tabeli ula. Mam problem z konfiguracją obiektów sesji, konferencji i kontekstów Spark. Tu jest mój kodu:Błąd inicjalizacji SparkSession - Nie można użyć spark.read

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") 

I pojawia się błąd:

dfRaw = spark.read.csv("hdfs:/user/../test.csv",header=False) AttributeError: 'Builder' object has no attribute 'read'

Jaki jest właściwy sposób skonfigurować zapłonową sesji obiektu w celu korzystania z polecenia read.csv? Czy ktoś może wyjaśnić różnicę między obiektami Sesji, Kontekstu i Conderence?

Odpowiedz

4

Nie ma potrzeby używania zarówno SparkContext, jak i SparkSession do inicjowania Sparka. SparkSession to nowsza, zalecana metoda użycia.

Aby zainicjować swoje środowisko, po prostu zrobić:

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

można uruchamiać komend SQL, wykonując:

spark.sql(...) 

Przed Spark 2.0.0, trzy oddzielne obiekty zostały wykorzystane: SparkContext, SQLContext i HiveContext. Zostały one użyte oddzielnie, w zależności od tego, co chcesz zrobić i typów danych używanych.

Dzięki intrukcji abstrakcji Dataset/DataFrame obiekt SparkSession stał się głównym punktem wejścia do środowiska Spark. Nadal można uzyskać dostęp do innych obiektów, inicjując najpierw SparkSession (powiedzmy w zmiennej o nazwie spark), a następnie wykonaj spark.sparkContext/spark.sqlContext.