【问题标题】:java.sql.SQLException -> NumberFormatException when using .show() method on DataFrame in sparkjava.sql.SQLException -> 在 Spark 中对 DataFrame 使用 .show() 方法时出现 NumberFormatException
【发布时间】:2020-12-18 23:46:01
【问题描述】:

每当我尝试在 org.apache.spark.sql.DataFrame 对象上使用 .show() 方法时,我都会得到

java.sql.SQLException: Cannot convert column 2 to integerjava.lang.NumberFormatException: For input string: "{table_name.column_name}" // here table_name.column_table indicates a placeholder I added for the sake of this question

我的 SparkSession:

val sparkSession: SparkSession = SparkSession.builder()
    .appName("My sql connector session")
    .master("local")
    .enableHiveSupport()
    .getOrCreate()

我的 DataFrame 加载器:

  val currentDF : DataFrameReader = sparkSession.sqlContext.read
                      .format("jdbc")
                      .option("url", hive_url)
                      .option("driver", "org.apache.hive.jdbc.HiveDriver")
                      .option("user", username)
                      .option("inferSchema", "true")
                      .option("password", password)
                      .option("dbtable", `{*table_name*}`).load()

当我执行以下代码时

    currentDF.createOrReplaceTempView("std")
    val newDf = sparkSession.sql("select count(*) as count from std")
    newDf.show()

我明白了

+-----+
|count|
+-----+
|  726|
+-----+

当我使用 currentDF.printSchema() 打印架构时,我有

|-- {table_name}.{column_name}: integer (nullable = true)

这表明 currentDF 包含数据,但每当我使用 .show() 方法时,我都会收到上述错误。我进行了搜索,但找不到与我相同的错误,因为我得到了 {table_name.column_name} 而不是表中的任何脏数据。我束手无策,对此感到非常困惑。任何帮助将不胜感激。

编辑:尝试通过将所有列转换为字符串类型来更改 df 的架构,仍然得到相同的结果。

PS : 我的 build.sbt

name := "sbt-validation"

version := "0.1"

scalaVersion := "2.12.4"

libraryDependencies ++= Seq(
  "com.github.tototoshi" %% "scala-csv" % "1.3.6",
  "io.netty" % "netty-all" % "4.1.42.Final",
  "org.apache.hive" % "hive-jdbc" % "3.0.0",
  "com.lihaoyi" %% "requests" % "0.6.5",
  "mysql" % "mysql-connector-java" % "8.0.15",
  "org.apache.spark" %% "spark-sql" % "3.0.0",
  "org.apache.spark" %% "spark-hive" % "3.0.0",
  "org.apache.spark" %% "spark-core" % "3.0.0"
    exclude(name="ch.qos.logback", org="ch.qos.logback")
)

【问题讨论】:

  • 我不知道这项技术,但从错误消息和您的代码来看,我认为可能会对您有所帮助 - stackoverflow.com/questions/47946449/…
  • @Sajal 也许它超出了 int 范围?
  • 我几乎可以肯定 sparkSession.sqlContext.read.format("jdbc")...load() 不会返回 DataFrameReader
  • 你能发布你的完整代码吗??

标签: scala apache-spark jdbc hive


【解决方案1】:

检查下面的代码。

val sparkSession: SparkSession = SparkSession.builder()
    .appName("My sql connector session")
    .master("local")
    .enableHiveSupport()
    .getOrCreate()
val currentDF : DataFrame = sparkSession.sqlContext.read
                      .format("jdbc")
                      .option("url", hive_url)
                      .option("driver", "org.apache.hive.jdbc.HiveDriver")
                      .option("user", username)
                      .option("inferSchema", "true")
                      .option("password", password)
                      .option("dbtable", "(select columna,columnb from schema_name.table_name) alias_name") // Replace your table name & column list as per your requirement.
                      .load()
currentDF.createOrReplaceTempView("std")
val newDf = sparkSession.sql("select count(*) as count from std")
newDf.show()                      

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2023-02-25
    • 2022-12-20
    • 2012-06-16
    相关资源
    最近更新 更多