Flink JDBCInputFormat无法找到方法' setRowTypeInfo'

时间:2017-07-09 09:28:51

标签: jdbc apache-flink

我想使用flink-jdbc从mysql获取数据。 我在Apache flink网站上看到了一个例子

// Read data from a relational database using the JDBC input format
DataSet<Tuple2<String, Integer> dbData =
    env.createInput(
      JDBCInputFormat.buildJDBCInputFormat()
                     .setDrivername("org.apache.derby.jdbc.EmbeddedDriver")
                     .setDBUrl("jdbc:derby:memory:persons")
                     .setQuery("select name, age from persons")
                     .setRowTypeInfo(new RowTypeInfo(BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO))
                     .finish()
    );

但是当我尝试编写演示时,我无法找到方法&#39; setRowTypeInfo&#39;。 就像这样

import org.apache.flink.api.common.typeinfo.BasicTypeInfo
import org.apache.flink.api.java.ExecutionEnvironment
import org.apache.flink.api.java.io.jdbc.JDBCInputFormat
import org.apache.flink.api.scala._

/**
  * Created by lulijun on 17/7/7.
  */
object FlinkJDBC {


  def main(args:Array[String]): Unit = {

    val env = ExecutionEnvironment.createLocalEnvironment()

    val dbData = env.createInput(
      JDBCInputFormat.buildJDBCInputFormat
        .setDrivername("com.mysql.jdbc.Driver")
        .setDBUrl("XXX")
        .setUsername("xxx")
        .setPassword("XXX")
        .setQuery("select name, age from persons")
        .setRowTypeInfo(new Nothing(BasicTypeInfo.STRING_TYPE_INFO, BasicTypeInfo.INT_TYPE_INFO))
        .finish)

    dbData.print()

    env.execute()
  }

}

&#34; setRowTypeInfo&#34;方法总是红色,IDEA会提示 &#34;无法解析符号setRowTypeInfo&#34;

我使用的flink-jdbc的jar版本是1.0.0。

<dependencies>
    <!-- Use this dependency if you are using the DataSet API -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-scala_2.10</artifactId>
        <version>1.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients_2.10</artifactId>
        <version>1.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-jdbc</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.36</version>
    </dependency>
</dependencies>

我搜索了很多,而且大部分人都使用与官方文档完全相同的方法,但在一个人提到了这个问题。 我怀疑我是否使用了错误版本的flink-jdbc,但我无法获得有关使用flink-jdbc的正确方法的任何信息。 如果你知道这个问题,请教我。谢谢。

1 个答案:

答案 0 :(得分:0)

我将flink-jdbc版本从1.0.0更改为1.3.0,问题解决了。 但是当我在maven websit上搜索flink-jdbc时 https://mvnrepository.com/search?q=flink-jdbc,我无法在前几页获得正确的信息,这让我觉得flink-jdbc的版本不需要与其他flink jar匹配。 但事实是flink-jdbc / 1.1.3使用包api.table的类RowTypeInfo,但flink-jdbc / 1.3.0使用包api.java的类RowTypeInfo。它们彼此关系密切。 我们必须确保版本匹配。