2017-06-30 9 views
-1

このエラーを解決するにはどうすればよいですか?saveAsTableを呼び出すときのorg.apache.spark.sql.AnalysisException

以下のコードはZeppelinで動作しますが、アセンブリジャーにコンパイルしてspark-submitで送信した場合は動作しません。

エラーは次のとおりです。

org.apache.spark.sql.AnalysisException:データベース名または 他の修飾子を指定するには、一時テーブルに対して許可されていません。テーブル の名前にドット(。)が含まれている場合は、バックティック ( `)でテーブル名を引用してください。

コード:使用して実行

import org.apache.spark._ 
    import org.apache.spark.rdd.NewHadoopRDD 
    import org.apache.spark.SparkContext 
    import org.apache.spark.SparkContext._ 
    import org.apache.spark.SparkConf 
    import org.apache.spark.sql.SQLContext 
    import org.apache.spark.sql.hive.HiveContext 
    import java.text.SimpleDateFormat 
    import java.util.Calendar 

    case class Benchmark(date: String, time: String, start_end: String, 
         server: String, timestamp: Long, interface: String, 
         cid: String, raw: String) 

    object job { 

     def main(args: Array[String]) { 

      val sdf = new java.text.SimpleDateFormat("yyyyMMdd") 
      val sdf1 = new java.text.SimpleDateFormat("yyyy-MM-dd") 
      val calendar = Calendar.getInstance() 
      calendar.set(Calendar.DAY_OF_YEAR, 
         calendar.get(Calendar.DAY_OF_YEAR) -1) 
      val date = sdf.format(calendar.getTime()) 
      val dt = sdf1.format(calendar.getTime()) 

      val conf = new SparkConf().setAppName("Interface_HtoH_Job") 
      val sc = new SparkContext(conf) 
      val sqlContext = new SQLContext(sc) 
      import sqlContext.implicits._ 
      val hiveContext = new HiveContext(sc) 

      val benchmarkText = sc.textFile(s"hdfs:/rawlogs/prod/log/${date}/*.gz") 

      val pattern = "([0-9-]{10}) ([0-9:]{8}),[0-9]{1,3} Benchmark..* - (Start|End)<ID=([0-9a-zA-Z_]+)-([0-9]+)><([0-9a-zA-Z.,:[email protected]() =_-]*)><cid=TaskId_([0-9A-Z#_a-z]+),.*><[,0-9:a-zA-Z ]+>".r 

      benchmarkText.filter { ln => ln.startsWith("2017-") } 
         .filter { l => l.endsWith(">") } 
         .filter { k => k.contains("<cid=TaskId") } 
         .map { line => 
           try { 
            var pattern(date,time,startEnd,server,ts,interface,cid) = line 
             Benchmark(date,time,startEnd,server,ts.toLong,interface,cid,line) 

           } catch { 

            case e: Exception => Benchmark(dt,"00:00:00","bad",e.toString,"0".toLong,"bad","bad",line) 

           } 

           }.toDF() 
       .write 
       .mode("overwrite") 
       .saveAsTable("prod_ol_bm.interface_benchmark_tmp") // error here 
    } 
} 

に火花を提出:

HDP : 2.5.3.0-37 
Spark : 1.6.2.2.5.3.0-37 built for Hadoop 2.7.3.2.5.3.0-37 
+0

実際に質問するのを忘れてしまったようです。あなたの質問を整理するために、より多くの時間を費やしてから、明確な問題の声明が含まれているかどうかを確認してください。 – zzzzBov

答えて

0

を変更し、次の行

val sqlContext = new SQLContext(sc) 

シェルとzeppelinの両方が、sqlContextという名前のHiveContextを作成します。これは少し愚かです。 ハイブに接続するには、HiveContextが必要です。

+0

ありがとう、私はこれを演繹した –

関連する問題