在spark jdbc中使用谓词读取

时间:2018-02-08 05:01:16

标签: scala hadoop apache-spark intellij-idea jdbc

我将数据从sql server提取到hdfs。这是我的代码片段,

val predicates = Array[String]("int_id < 500000", "int_id >= 500000 && int_id < 1000000")

  val jdbcDF = spark.read.format("jdbc")
      .option("url", dbUrl)
      .option("databaseName", "DatabaseName")
      .option("dbtable", table)
      .option("user", "***")
      .option("password", "***")
      .option("predicates", predicates)
      .load()

我的Intellij IDE一直在说

  

&#34;类型不匹配,预期布尔值或长或双或字符串,实际:   阵列[字符串]&#34;

在谓词中。不知道这有什么不对。任何人都可以看到这个错误吗?另外我如何在这里使用获取大小?

感谢。

1 个答案:

答案 0 :(得分:5)

option方法仅接受BooleanLongDoubleString s。要将predicates作为Array[String]传递,您必须使用jdbc方法,而不是在format方法中指定它。

val predicates = Array[String]("int_id < 500000", "int_id >= 500000 && int_id < 1000000")

val jdbcDF = spark.read.jdbc(
  url = dbUrl,
  table = table,
  predicates = predicates,
  connectionProperties = new Properties(???) // user, pass, db, etc.
)

您可以看到示例here