2017-09-01 4 views
1

MS-SQL環境からスパークアクセスを持つHIVE環境に移行します。私がT-SQLを使うのに使ったいくつかのものだけでなく、私が前にやったことのないようなものを置き換えるために、RStudioとR(時にはrPythonを使ったPython)を使用しようとしました。R DBI Sparklyr DBWritetableが結果なしで実行中

これを動作させるには、HIVE DBに読み書きできるようにする必要があります。

私は火花とRパッケージsparklyrを使用して接続していると火花接続でRパッケージDBIを使用して、当社のHIVEクラスタに接続し、うまくRのデータフレームにデータを引くことができます。

sc <- spark_connect(master = "yarn-client", spark_home="/usr/hdp/current/spark-client", config = config) 
result3 <- dbGetQuery(sc, "select * from sampledb.sampletable limit 100") 

上記のコードの作品を毎回。 DBGetQueryを問題なく使用しているので、書き込み権限の問題ではなく、引用符付きのSQL文のコンテキストでDB内にテーブルを作成することもできます。しかし

、私は戻ってそのようなHIVEクラスタにRフレームからのデータを書き込もう:

dbWriteTable(conn = sc, name = "sampledb.rsparktest3", value = result3) 

それはエラーなしで実行されますが、テーブルは表示されませんし、私はそれを照会することはできません。何が起きている可能性が

> dbWriteTable(conn = sc, name = "sampledb.rsparktest3", value = result3) 
Error in .local(conn, name, value, ...) : 
Table sampledb.rsparktest3 already exists 

任意のアイデア:私は再びテーブルを書き込もうとした場合

私はこのエラーを取得しますか?私はDBIの他にこれをやっていなければならない良い方法がありますか?

ありがとうございました!

以下

私はこれらのステートメントを実行したときから、全体RStudioコンソールログです:

> result3 <- dbGetQuery(sc, "select * from sampledb.sampletable limit 100") 
> dbWriteTable(conn = sc, name = "sampledb.rsparktest3", value = result3) 
> result3y <- dbGetQuery(sc, "select * from sampledb.rsparktest3 limit 2") 
Error: org.apache.spark.sql.AnalysisException: Table not found: sampledb.rsparktest3; line 1 pos 35 
at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42) 
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1.apply(CheckAnalysis.scala:54) 
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAnalysis$1.apply(CheckAnalysis.scala:50) 
at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:121) 
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:120) 
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:120) 
at scala.collection.immutable.List.foreach(List.scala:318) 
at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:120) 
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:120) 
at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$foreachUp$1.apply(TreeNode.scala:120) 
at scala.collection.immutable.List.foreach(List.scala:318) 
at org.apache.spark.sql.catalyst.trees.TreeNode.foreachUp(TreeNode.scala:120) 
at org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.checkAnalysis(CheckAnalysis.scala:50) 
at org.apache.spark.sql.catalyst.analysis.Analyzer.checkAnalysis(Analyzer.scala:44) 
at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:34) 
at org.apache.spark.sql.DataFrame.<init>(DataFrame.scala:133) 
at org.apache.spark.sql.DataFrame$.apply(DataFrame.scala:52) 
at org.apache.spark.sql.SQLContext.sql(SQLContext.scala:817) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at sparklyr.Invoke$.invoke(invoke.scala:102) 
at sparklyr.StreamHandler$.handleMethodCall(stream.scala:97) 
at sparklyr.StreamHandler$.read(stream.scala:62) 
at sparklyr.BackendHandler.channelRead0(handler.scala:52) 
at sparklyr.BackendHandler.channelRead0(handler.scala:14) 
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308) 
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294) 
at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) 
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308) 
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294) 
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:244) 
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308) 
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294) 
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846) 
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) 
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) 
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468) 
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) 
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) 
at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) 
at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137) 
at java.lang.Thread.run(Thread.java:745) 
> dbWriteTable(conn = sc, name = "sampledb.rsparktest3", value = result3) 
Error in .local(conn, name, value, ...) : 
Table sampledb.rsparktest3 already exists 

答えて

0

sparklyr接続して使用してハイブにスパークテーブルの書き込みバックハイブ

+0

感謝を。 > spark_write_table(spark_iris、spark_iris2)UseMethodで エラー( "spark_write_table"): 'spark_write_table' のノー適用可能な方法は クラス "data.frame" のオブジェクトに適用さ – wlf211

+0

こんにちは、呼び出しはこのようなものでなければなりません。 'spark_write_table(spark_iris、" hive_iris ")'最初の引数 'x'はSpark DFでなければならず、2番目の引数はハイブ内部のテーブルの名前です – edgararuiz

0

への書き込みに代わりdbWriteTableのspark_write_tableを使用Sparklyr:

がスパークするために、ローカルのデータフレームのロード:

iris_spark_table <- copy_to(sc, iris, overwrite = TRUE) 
sdf_copy_to(sc, iris_spark_table) 

が(必要に応じて、データベース名を追加)ハイブ内のテーブルの作成:私はspark_write_table使用しようとするとエドガーが、しかし、それはRのデータフレームを受け入れないだろうと私のスパークデータフレームを認識doesntの

DBI::dbGetQuery(sc, "create table iris_hive as SELECT * FROM iris_spark_table") 
関連する問題