我正在尝试使用pyspark运行SQL查询。我正在使用以下代码:
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寄存器,而它具有!我很困惑!谁能帮助我?
@philantrovert指出正确的功能是 registerTempTable
dataFrames具有registerTempTable
属性(您可以将它们转换为Spark SQL),但RDD没有(这不是结构化表)。
只使用:
df.registerTempTable("transactions")
由于它已经被加载为数据框。
如果您想要数据库中的永久表,请使用.write.saveAsTable("transactions")