web-dev-qa-db-ja.com

SparkSession初期化エラー-spark.readを使用できません

Csvを読み取り、それをHiveテーブルに保存するスタンドアロンのPySparkプログラムを作成しようとしました。 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セッションオブジェクトを構成する正しい方法はどれですか?また、誰かがセッション、コンテキスト、および会議オブジェクトの違いを説明できますか?

9
Michail N

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

環境を初期化するには、次のようにします。

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

次の手順でSQLコマンドを実行できます。

spark.sql(...)

Spark 2.0.0より前は、SparkContextSQLContext、およびHiveContextの3つの別個のオブジェクトが使用されていました。これらは、実行する操作と使用するデータ型に応じて別々に使用されていました。

Dataset/DataFrame抽象化の導入により、SparkSessionオブジェクトがSpark環境へのメインエントリポイントになりました。最初にSparkSessionを初期化することで、他のオブジェクトにアクセスできます(たとえば変数内)。名前はspark)、次にspark.sparkContext/spark.sqlContextを実行します。

9
Shaido