2017-09-04 18 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

dataframes有registerTempTable屬性(你可以將它們轉換爲SQL火花),但RDDS不(它不是一個結構化的表)。

只需使用:

df.registerTempTable("transactions") 

因爲它已經加載的數據幀。

如果你想在你的數據庫中永久表,使用.write.saveAsTable("transactions")

+0

*'registerTempTable' – philantrovert

+0

你說得對!謝謝 – MaFF

+0

起初我是這麼做的,但仍然有同樣的錯誤,說DataFrame對象沒有屬性registerAsTable! –