flink実行中によくあるエラーのまとめ

2209 ワード

エラー1.flink FAQ
flinkエラーメッセージ:missing parameter type
Error:(24, 15) reference to StreamExecutionEnvironment is ambiguous;
it is imported twice in the same scope by
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
and import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
    val env = StreamExecutionEnvironment.getExecutionEnvironment

Error:(42, 22) missing parameter type
    transaction.map( arrbyte1 => {

問題の原因と解決方法
1 importのStreamExecutionEnvironmentに注意
//javaの頭は
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
//scalaの頭は:
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment
Javaの環境初期化contextを誤って使用すると、コンパイラがうまくヒントを与えることができず、java環境でしか見られないようなエラーが発生します.たとえば、次のようになります.
missing parameter type for expanded function
cannot resolve symbol with such signature
定義が見つからない、タイプが分からないなどのエラーが多いので、scalaプログラムを書く第一歩は必ずStreamExecutionEnvironmentが正しいかどうかを確認しなければなりません.
参照リンク:https://www.jianshu.com/p/d9b23614f9a6
エラー2:scala:java list to scala list
問題は、flatMapを作って、2次元のjava配列を展開してストリーム計算に使いたいのですが、どうしても・書くことができず、理屈で直接flatMap(x=>x)でいいので、いろいろなデバッグで、logの中にjavaがずっとあることがわかりました.util.リストの文字は、後でこのリストがscalaが認識していないのでflattenできないのではないかと疑った.
調べてみると、やはり、やるべきことは簡単です.
import scala.collection.JavaConverters._
.flatMap(x => x.asScala.toList)
参照リンク:https://www.jianshu.com/p/d9b23614f9a6
エラー3
Error:(36, 61) could not find implicit value for evidence parameter of type org.apache.flink.api.common.typeinfo.TypeInformation[Int]

問題の解釈と解決方法
mapの定義に[R:TypeInformation]がありますが、暗黙的なパラメータに関する定義は指定されていません.この場合、コンパイルコードはTypeInformationを作成できないため、上記の異常情報が表示されます.この問題を解決するには以下の2つの方法があります(1)、コードに直接以下のコードを加えることができます.
    implicit val typeInfo = TypeInformation.of(classOf[Int])

次にコードをコンパイルすると、上記の異常は発生しません.(2)、しかしこれはFlinkが私たちに推薦したのではなく、コードにパッケージを導入することをお勧めします.
    import org.apache.flink.streaming.api.scala._

データが限られている場合(静的データセット)、次のパッケージを導入できます.
    import org.apache.flink.api.scala._

その後、上記の異常情報を解決できます.