"对象java.lang.String不是值" scala代码中的错误

时间:2017-03-24 06:11:55

标签: scala apache-flink

我的scala程序中有以下代码,它使用Flink的Table API。

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

编辑器在三个字符串的第三行显示错误,错误消息为"对象java.lang.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

我使用了' String'在Flink的许多其他scala程序中。但我在任何这些程序中都没有遇到过这样的错误。

1 个答案:

答案 0 :(得分:2)

首先,您不能将类型(在本例中为String)用作Array中的值。集合存储对象。您应该传递Array[TypeInformation[_]]类型的数组。

所以看起来应该是这样的:

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)
  )

不幸的是,您现在必须明确提供Array的类型。出于原因,您可以查看this讨论。