下面是简单的Scala类,稍后我将对它进行修改,以适应一些机器学习模型。
我需要用它创建一个jar文件,因为我要在amazon-emr中运行这些模型。我是这个过程的初学者。因此,我首先测试是否可以通过使用下面提到的Scala类创建一个jar文件来成功导入以下csv文件并将其写入另一个文件。
csv文件如下所示,其包含一个Date列作为变量之一。
+-------------------+-------------+-------+---------+-----+
| 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文件。成功地完成了。
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集群中运行这个文件。
但是它失败了,我收到了以下错误消息:
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列。在这种情况下,我得到了这个错误:
ERROR Client: Application diagnostics message: User class threw exception: org.apache.spark.sql.AnalysisException: Text data source does not support double data type.;谢谢
发布于 2020-04-10 19:47:59
我后来注意到你要写一个文本文件。Spark的.format(text)不支持任何特定类型,只支持字符串/文本。因此,要实现一个目标,首先需要将所有类型转换为String并存储:
df.rdd.map(_.toString().replace("[","").replace("]", "")).saveAsTextFile("textfilename")如果您可以考虑其他oprion将数据存储为基于文件的数据,那么您可以从类型中获得好处。例如,使用CSV或JSON。这是基于csv文件的工作代码示例。
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")不需要自定义编解码器。
https://stackoverflow.com/questions/61147303
复制相似问题