2017-09-04 1 views
0

私はpysparkでSQLクエリを実行しようとしています。RDD.registerAsTableでエラーが発生しましたか?

from pyspark import SparkConf, SparkContext 
from pyspark.sql import SQLContext, Row 
import os 

spark_config = SparkConf().setMaster("local").setAppName("Project_SQL") 
sc = SparkContext(conf = spark_config) 
sqlctx = SQLContext(sc) 

df = sqlctx.read.format("jdbc").option(url="..." 
            , driver = "oracle.jdbc.driver.OracleDriver" 
            , dbtable = "UDM_CDS.TRANSACTIONS" 
            , user="..." 
            , password="...").load() 


df_rdd = df.rdd 
df_rdd.registerAsTable("transactions") 
sqlctx.sql('SELECT TRANSACTION_KEY FROM transactions').show(5) 

をしかし、RDDのオブジェクトがatributte registerAsTableを持っていないということがありながら、それは、言い続け:私は、次のコードを使用しています!よくわかりません! 誰も私にこれを手伝ってもらえますか?

答えて

0

@philantrovertが正しい機能を指摘したようにregisterTempTable

データフレームはregisterTempTable属性を持っている(あなたは、SQLを刺激するためにそれらを変換することができます)が、RDDSは(それが構造化されたテーブルではありません)しないことです。

ちょうど使用:

df.registerTempTable("transactions") 

それはすでにデータフレームとしてロードされますので。

あなたがデータベースに永続的なテーブルをしたい場合は、.write.saveAsTable("transactions")

+0

*を使用するには、 'registerTempTable' – philantrovert

+0

あなたが正しいです!ありがとう – MaFF

+0

最初に私はそうしましたが、DataFrameオブジェクトには属性registerAsTableがないと言って同じエラーがありました! –

関連する問題