Scala Spark:通过对临时表执行sql查询来创建临时表

Scala Spark:通过对临时表执行sql查询来创建临时表,scala,apache-spark,jenkins,jdbc,Scala,Apache Spark,Jenkins,Jdbc,我正在使用Spark,我想知道:如何通过对表A和表B执行sql查询来创建名为C的临时表 sqlContext .read.json(file_name_A) .createOrReplaceTempView("A") sqlContext .read.json(file_name_B) .createOrReplaceTempView("B") val tableQuery = "(SELECT A.id, B.name FROM A INNER JOIN B ON

我正在使用Spark,我想知道:如何通过对表A和表B执行sql查询来创建名为C的临时表

sqlContext
   .read.json(file_name_A)
   .createOrReplaceTempView("A")

sqlContext
   .read.json(file_name_B)
   .createOrReplaceTempView("B")

val tableQuery = "(SELECT A.id, B.name FROM A INNER JOIN B ON A.id = B.fk_id) C"

sqlContext.read
   .format(SQLUtils.FORMAT_JDBC)
   .options(SQLUtils.CONFIG())
   .option("dbtable", tableQuery)
   .load()

您需要将结果保存为临时表

tableQuery .createOrReplaceTempView("dbtable")
外部表上的永久存储您可以使用JDBC

val prop = new java.util.Properties
prop.setProperty("driver", "com.mysql.jdbc.Driver")
prop.setProperty("user", "vaquar")
prop.setProperty("password", "khan") 

//jdbc mysql url - destination database is named "temp"
val url = "jdbc:mysql://localhost:3306/temp"

//destination database table 
val table = "sample_data_table"

//write data from spark dataframe to database
df.write.mode("append").jdbc(url, dbtable, prop)


请尝试上面的代码,它会起作用。

您的答案是有效的,不幸的是,我不能使用sqlContext.sql,因为它不会在数据库中执行整个请求。实际上,sqlContext.sql可以将查询拆分为两部分,然后选择并在不同的worker上执行连接。在我的例子中,工人们没有足够的内存来处理它,他们崩溃了。。。
sqlContext.read.json(file_name_A).createOrReplaceTempView("A")
sqlContext.read.json(file_name_B).createOrReplaceTempView("B")
val tableQuery = "(SELECT A.id, B.name FROM A INNER JOIN B ON A.id = B.fk_id) C"
sqlContext.sql(tableQuery).createOrReplaceTempView("C")