2016-07-21 33 views
0

嗨,我需要在火花工作中在鳳凰城創建一個表格。我已經嘗試了2種方法,但都沒有工作,似乎仍然不支持。在火鳳凰創建表格

1)Dataframe.write仍然要求這些表之前存在

df.write.format("org.apache.phoenix.spark").mode("overwrite").option("table", schemaName.toUpperCase + "." + tableName.toUpperCase ).option("zkUrl", hbaseQuorum).save() 

2)如果我們連接到鳳凰直通JDBC,並嘗試執行CREATE statemnt,那麼我們得到一個解析錯誤(同樣創造在鳳凰工作)

var ddlCode="create table test (mykey integer not null primary key, mycolumn varchar) " 

val driver = "org.apache.phoenix.jdbc.PhoenixDriver" 
val jdbcConnProps = new Properties() 
jdbcConnProps.setProperty("driver", driver); 
val jdbcConnString = "jdbc:phoenix:hostname:2181/hbase-unsecure" 
sqlContext.read.jdbc(jdbcConnString, ddlCode, jdbcConnProps) 

錯誤: org.apache.phoenix.exception.PhoenixParserException:ERROR 601(42P00):語法錯誤。在第1行第15列遇到「創建」。

任何具有類似挑戰的人都能以不同的方式做到這一點?

+0

您是否發現瞭解決上述問題的方法?我也在尋找同樣的東西。 – pjain

回答

0

我終於在這個解決方案中工作。基本上我想通過嘗試使用SQLContext讀取方法是錯誤的。我認爲這種方法只是爲了「讀取」數據源而設計的。工作的方式基本上是打開一個針對Phoenix的標準JDBC連接:

var ddlCode="create table test (mykey integer not null primary key, mycolumn varchar) " 
val jdbcConnString = "jdbc:hostname:2181/hbase-unsecure" 
val user="USER" 
val pass="PASS" 
var connection:Connection = null 
Class.forName(driver) 
connection = DriverManager.getConnection(jdbcConnString, user, pass) 
val statement = connection.createStatement() 
statement.executeUpdate(ddlCode)