0

我使用的Spark 2.1天青(HDInsight)與Jupyter筆記本。如何創建多個臨時表中的一個單元格中Jupyter?

我不能創建在一個筆記本電池多個表。

下面的查詢工作正常:

%%sql 

create table if not exists temp1(Col varchar(32)) 

回報:沒有結果。

下面的查詢不會在單個單元格的工作:遇到

%%sql 

create table if not exists temp2(Col varchar(32)) 
create table if not exists temp3(Col varchar(32)) 

enter image description here

錯誤: org.apache.spark.sql.catalyst。 parser.ParseException:不匹配的輸入 '創建' 預期(線3,POS 0)

== SQL ==

創建表,如果不存在TEMP2(西VARCHAR(32))創建表,如果不存在 TEMP3(西VARCHAR(32))^^^

在 有機apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:197) 在 org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:99) 在 有機apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:45) 在 org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan( ParseDriver.scala:53) 在org.apache.spark.sql.SparkSession.sql(SparkSession.scala:592)... 47省略掉

我怎麼能在一個單元中創建多個表?

回答

3

出現 Jupyter中的單個單元與sql解釋器對應於Spark執行的單個SQL查詢。

可能的解決方法可以是使用spark解釋(或scala)和執行SQL語句中spark.sql如下:

%%spark 

spark.sql("create table if not exists temp2(Col varchar(32))") 
spark.sql("create table if not exists temp3(Col varchar(32))") 

也就是說應該工作。

+0

不這麼認爲給予從'AbstractSqlParser'是後'SparkSession.sql'執行堆棧跟蹤。換句話說,你可以使用'sql'運算符執行兩個完整的SQL語句嗎?或者Jupyter解析';'特別是?不知道。 –

+1

我不這麼認爲。 'spark-sql' shell不會受到多行語句的困擾,所以它不應該是一個硬性限制。無論如何,只要在這裏釣魚。我不知道'%% sql'魔法是如何實現的。 – zero323

+1

對。 ''spark-sql'甚至可以在單行上使用';'正常工作。 –

相關問題