Scala Spark:使用指定的日期格式读取csv
我需要读取一个特定日期格式的Spark csv文件。但最后我还是将Scala Spark:使用指定的日期格式读取csv,scala,csv,apache-spark,Scala,Csv,Apache Spark,我需要读取一个特定日期格式的Spark csv文件。但最后我还是将date列解释为一般字符串,而不是date 输入csv文件: cat oo2.csv 约会什么的 2013.01.02,0 2013.03.21,0 使用Spark 3.1.1: import org.apache.spark.sql.SparkSession val spark:SparkSession=SparkSession.builder().master(“本地[*]”) .appName(“Hmmm”) .getOr
date
列解释为一般字符串,而不是date
输入csv文件:
cat oo2.csv
约会什么的
2013.01.02,0
2013.03.21,0
使用Spark 3.1.1:
import org.apache.spark.sql.SparkSession
val spark:SparkSession=SparkSession.builder().master(“本地[*]”)
.appName(“Hmmm”)
.getOrCreate()
val oo=spark.read。
选项(“标题”、“真”)。
选项(“推断模式”、“真”)。
选项(“日期格式”、“yyyy.MM.dd”)。
csv(“oo2.csv”)
oo.printSchema()
oo.show()
我得到:
root
|-- date: string (nullable = true)
|-- something: integer (nullable = true)
+----------+---------+
| date|something|
+----------+---------+
|2013-01-02| 0|
|2013-03-21| 0|
+----------+---------+
我错过什么了吗?它应该是简单的,基本上类似的方法在中描述:但没有快乐
ps如果我试图解析Spark之外的日期
导入java.text.simpleDataFormat
val a=新的简化格式(“yyyy.MM.dd”)
a、 解析(“2013.01.02”)
它工作得非常好Spark无法推断日期
类型。
有两种可能性:
我们提出了在阅读过程中推断
日期
类型的要求。让我们看看开发人员社区将如何响应不,不需要指定模式(有选项(“推断模式”,“真”)
要自动获取模式,除了日期
列之外,这工作正常。这正是问题所在。推断模式
无法推断日期类型列。hmmm-如果我看:-似乎可以使用日期格式。如果模式可以推断为整数
或双
为什么不能推断日期
。这会很奇怪……为什么您认为InferSchema
不能与date
一起使用?是的,只要您指定一个架构,就可以使用dateFormat。这只是根据我的经验,您的问题也证实了InferSchema不能与dateFormat一起使用。@xhudik请参阅InferSchema的工作原理。。。
val df = spark.read
.option("header",true)
.option("dateFormat","yyyy.MM.dd")
.schema("date date, something int")
.csv("oo2.csv")
val oo = spark.read.
option("header","true").
//infer schema for other types
option("inferSchema","true").
csv("oo2.csv").
//manually create a new column with date
withColumn("new_date", to_date(col("date"),"yyyy.MM.dd."))