首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Scala创建jar文件时的org.apache.spark.sql.AnalysisException错误

使用Scala创建jar文件时的org.apache.spark.sql.AnalysisException错误
EN

Stack Overflow用户
提问于 2020-04-10 19:25:35
回答 1查看 1.1K关注 0票数 0

下面是简单的Scala类,稍后我将对它进行修改,以适应一些机器学习模型。

我需要用它创建一个jar文件,因为我要在amazon-emr中运行这些模型。我是这个过程的初学者。因此,我首先测试是否可以通过使用下面提到的Scala类创建一个jar文件来成功导入以下csv文件并将其写入另一个文件。

csv文件如下所示,其包含一个Date列作为变量之一。

代码语言:javascript
运行
复制
+-------------------+-------------+-------+---------+-----+
|               Date|      x1     |    y  |      x2 | x3  |       
+-------------------+-------------+-------+---------+-----+
|0010-01-01 00:00:00|0.099636562E8|6405.29|    57.06|21.55|
|0010-03-31 00:00:00|0.016645123E8|5885.41|    53.54|21.89|
|0010-03-30 00:00:00|0.044308936E8|6260.95|57.080002|20.93|
|0010-03-27 00:00:00|0.124928214E8|6698.46|65.540001|23.44|
|0010-03-26 00:00:00|0.570222885E7|6768.49|     61.0|24.65|
|0010-03-25 00:00:00|0.086162414E8|6502.16|63.950001|25.24| 

数据集链接:https://drive.google.com/open?id=18E6nf4_lK46kl_zwYJ1CIuBOTPMriGgE

我使用intelliJ IDEA创建了一个jar文件。成功地完成了。

代码语言:javascript
运行
复制
object jar1 {
  def main(args: Array[String]): Unit = {


      val sc: SparkSession = SparkSession.builder()
        .appName("SparkByExample")
        .getOrCreate()

       val data = sc.read.format("csv")
      .option("header","true")
      .option("inferSchema","true")
      .load(args(0))

    data.write.format("text").save(args(1))

  }

}

之后,我上传这个jar文件以及上面提到的amazon-s3中提到的csv文件,并尝试在一个amazon-emr集群中运行这个文件。

但是它失败了,我收到了以下错误消息:

代码语言:javascript
运行
复制
ERROR Client: Application diagnostics message: User class threw exception: org.apache.spark.sql.AnalysisException: Text data source does not support timestamp data type.;

我确信此错误与数据集中的Date变量有关。但我不知道怎么解决这个问题。

有人能帮我弄清楚吗?

更新:

我试图打开前面提到的相同的csv文件,但没有date列。在这种情况下,我得到了这个错误:

代码语言:javascript
运行
复制
ERROR Client: Application diagnostics message: User class threw exception: org.apache.spark.sql.AnalysisException: Text data source does not support double data type.;

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-10 19:47:59

我后来注意到你要写一个文本文件。Spark的.format(text)不支持任何特定类型,只支持字符串/文本。因此,要实现一个目标,首先需要将所有类型转换为String并存储:

代码语言:javascript
运行
复制
    df.rdd.map(_.toString().replace("[","").replace("]", "")).saveAsTextFile("textfilename")

如果您可以考虑其他oprion将数据存储为基于文件的数据,那么您可以从类型中获得好处。例如,使用CSV或JSON。这是基于csv文件的工作代码示例。

代码语言:javascript
运行
复制
val spark = SparkSession.builder
  .appName("Simple Application")
  .config("spark.master", "local")
  .getOrCreate()
import spark.implicits._
import spark.sqlContext.implicits._

val df = spark.read
  .format("csv")
  .option("delimiter", ",")
  .option("header", "true")
  .option("inferSchema", "true")
  .option("dateFormat", "yyyy-MM-dd")
  .load("datat.csv")

df.printSchema()
df.show()

df.write
  .format("csv")
  .option("inferSchema", "true")
  .option("header", "true")
  .option("delimiter", "\t")
  .option("timestampFormat", "yyyy-MM-dd HH:mm:ss")
  .option("escape", "\\")
  .save("another")

不需要自定义编解码器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61147303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档