2017-03-24 5 views
0

FlinkのテーブルAPIを使用する私のスカラープログラムに以下のコードがあります。"オブジェクトjava.lang.Stringは値ではありません"スカラコードのエラー

val custTS = new CsvTableSource("D:\\input\\customerinfo.csv", 
           Array("customerId","name","address","zip"), 
           Array(String,String,String,Long)) 

エディタがエラーメッセージ 『値をjava.lang.Stringではないオブジェクト』と3「文字列の3行目でエラーが表示されています。 'String'は、コードの残りの多くの場所で使用されます。しかし、他の場所ではエラーを投げかけません。私は同様の問題が記載されたStackoverflowの質問のいくつかを見ましたが、私はこれを解決できませんでした。 プログラムのインポートを以下に示します。

import org.apache.flink.api.scala._ 
import org.apache.flink.table.api.TableEnvironment 
import org.apache.flink.table.api.scala._ 
import org.apache.flink.table.sinks.CsvTableSink 
import org.apache.flink.table.sources.CsvTableSource 

私はFlinkの他の多くのスケーラプログラムで 'String'を使用しています。しかし、私はそのようなプログラムでこのようなエラーに遭遇していません。

答えて

2

まず、Arrayの値としてタイプ(この場合はString)を使用することはできません。コレクションにはオブジェクトが格納されます。タイプArray[TypeInformation[_]]の配列を渡す必要があります。

だから、次のようになります。残念ながら、今あなたが明示的にArrayのためのタイプを提供する必要が

import org.apache.flink.table.api.Types 

val custTS = new CsvTableSource(
    "D:\\input\\customerinfo.csv", 
    Array("customerId", "name", "address", "zip"), 
    Array[TypeInformation[_]](Types.STRING, Types.STRING, Types.STRING, Types.LONG) 
) 

。理由は、thisのディスカッションをご覧ください。

+0

ありがとうDawid。それが問題を解決しました。前のコードでは、私は参考文献としてリンク "https://www.slideshare.net/fhueske/taking-a-look-under-hood-of-apache-flinks-relational-apis"のコードスニペットを使用していました。 しかし、彼らはガイドラインになっていて、コードに直接使用されることはないと思います。 – avidlearner

関連する問題