2017-10-24 18 views
5

csvを読み込んでハイブテーブルに格納するスタンドアロンのPySparkプログラムを作成しようとしました。私は、Sparkセッション、会議、およびコンテキストオブジェクトの設定に問題があります。SparkSession初期化エラー - 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") 

そして、私はエラーを取得する:ここに私のコードです

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

read.csvコマンドを使用するために、スパークセッションオブジェクトを設定するための正しい方法はどれ?また、誰かがSession、Context、Conderenceオブジェクト間の違いについて説明することができますか?

答えて

4

SparkContextSparkSessionの両方を使用してSparkを初期化する必要はありません。 SparkSessionは新しい、推奨される方法です。

環境を初期化するには、単に実行します。

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

あなたはSQLを実行できるコマンドを実行して:

spark.sql(...) 

2.0.0スパークする前に、3つの別々のオブジェクトを使用しました: SparkContext,SQLContextおよびHiveContext。これらは、あなたがやりたいことと使用されているデータタイプに応じて別々に使用されました。

データセット/データフレーム抽象概念の導入により、SparkSessionオブジェクトがSpark環境のメインエントリポイントになりました。 (変数名はspark)を初期化してからspark.sparkContext/spark.sqlContextとすることで、他のオブジェクトにアクセスすることは可能です。

関連する問題