【发布时间】: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