【发布时间】:2017-06-12 21:50:43
【问题描述】:
我正在尝试在 DataFrame 中创建一个新列。这个新列将包含从 Long 时间戳创建的格式化数据字符串(以毫秒为单位)。
我不断收到此错误:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.sql.DataFrameReader.jdbc(Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)Lorg/apache/spark/sql/Dataset;
出现在这段代码中:
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
import org.apache.spark.sql.{DataFrame, SQLContext}
import joptsimple.OptionParser
import org.apache.spark.sql.functions._
import java.text.SimpleDateFormat
import org.apache.spark.sql.functions.udf
.
.
.
val formatDateUDF = udf((ts: Long) => {
new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss").format(ts)
})
我在 build.sbt 中使用了以下依赖项:
scalaVersion := "2.11.11"
libraryDependencies ++= Seq(
// Spark dependencies
"org.apache.spark" % "spark-hive_2.11" % "2.1.1" % "provided",
"org.apache.spark" % "spark-mllib_2.11" % "2.1.1" % "provided",
// Third-party libraries
"postgresql" % "postgresql" % "9.1-901-1.jdbc4",
"net.sf.jopt-simple" % "jopt-simple" % "5.0.3",
"org.scalactic" %% "scalactic" % "3.0.1",
"org.scalatest" %% "scalatest" % "3.0.1" % "test",
"joda-time" % "joda-time" % "2.9.9"
)
我愿意接受其他可能更容易(或者至少可以工作)的方法。
【问题讨论】:
-
为什么不使用 unix_timestamp 而不是 UDF?
-
错误似乎不在 udf 中,而是在您从 jdbc 读取数据并转换为数据集的地方。因此,请同时使用阅读部分更新您的问题。
标签: scala apache-spark apache-spark-sql spark-dataframe udf