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セッションオブジェクトを構成する正しい方法はどれですか?また、誰かがセッション、コンテキスト、および会議オブジェクトの違いを説明できますか?
Sparkを初期化するためにSparkContext
とSparkSession
の両方を使用する必要はありません。 SparkSession
は、新しい推奨される使用方法です。
環境を初期化するには、次のようにします。
spark = SparkSession\
.builder\
.appName("test_import")\
.getOrCreate()
次の手順でSQLコマンドを実行できます。
spark.sql(...)
Spark 2.0.0より前は、SparkContext
、SQLContext
、およびHiveContext
の3つの別個のオブジェクトが使用されていました。これらは、実行する操作と使用するデータ型に応じて別々に使用されていました。
Dataset/DataFrame抽象化の導入により、SparkSession
オブジェクトがSpark環境へのメインエントリポイントになりました。最初にSparkSession
を初期化することで、他のオブジェクトにアクセスできます(たとえば変数内)。名前はspark
)、次にspark.sparkContext
/spark.sqlContext
を実行します。