如何从数据帧中获取完整的时间戳值?值被截断
How to get full timestamp value from dataframes? values being truncated
我有一个函数 "toDate(v:String):Timestamp",它接受一个字符串并将其转换为格式为 "MM-DD-YYYY HH24:MI:SS.NS".
的时间戳
我做了一个函数的udf:
val u_to_date = sqlContext.udf.register("u_to_date", toDate_)
将 UDF 应用于 dataframes
时会出现此问题。结果 dataframe
将失去最后 3 纳秒。
例如,当使用参数“0001-01-01 00:00:00.123456789”时
生成的数据框将采用以下格式
[0001-01-01 00:00:00.123456]
我什至尝试过 returns Timestamp.valueOf("1234-01-01 00:00:00.123456789")
的虚拟函数。当应用虚拟函数的 udf
时,它将截断最后 3 纳秒。
我查看了 sqlContext conf 和
spark.sql.parquet.int96AsTimestamp 设置为 True。 (设置为false时我试过了)
我在这里迷路了。是什么导致最后 3 位数字被截断?
例子
函数可以是:
def date123(v: String): Timestamp = {
Timestamp.valueOf("0001-01-01 00:00:00.123456789")
}
它只是一个虚拟函数,应该 return 具有完全纳秒精度的时间戳。
然后我会做一个udf:
`val u_date123 = sqlContext.udf.register("u_date123", date123 _)`
示例 df:
val theRow =Row("blah")
val theRdd = sc.makeRDD(Array(theRow))
case class X(x: String )
val df = theRdd.map{case Row(s0) => X(s0.asInstanceOf[String])}.toDF()
如果我将 udf 应用于带有字符串列的数据框 df
,它将 return 一个看起来像 '[0001-01-01 00:00:00.123456] 的数据框'
df.select(u_date123($"x")).collect.foreach(println)
我想我找到了问题所在。
在 spark 1.5.1 上,他们将时间戳数据类型的大小从 12 字节更改为 8 字节
我在 spark 1.4.1 上测试过,它产生了完整的纳秒精度。
我有一个函数 "toDate(v:String):Timestamp",它接受一个字符串并将其转换为格式为 "MM-DD-YYYY HH24:MI:SS.NS".
的时间戳我做了一个函数的udf:
val u_to_date = sqlContext.udf.register("u_to_date", toDate_)
将 UDF 应用于 dataframes
时会出现此问题。结果 dataframe
将失去最后 3 纳秒。
例如,当使用参数“0001-01-01 00:00:00.123456789”时
生成的数据框将采用以下格式
[0001-01-01 00:00:00.123456]
我什至尝试过 returns Timestamp.valueOf("1234-01-01 00:00:00.123456789")
的虚拟函数。当应用虚拟函数的 udf
时,它将截断最后 3 纳秒。
我查看了 sqlContext conf 和 spark.sql.parquet.int96AsTimestamp 设置为 True。 (设置为false时我试过了)
我在这里迷路了。是什么导致最后 3 位数字被截断?
例子
函数可以是:
def date123(v: String): Timestamp = {
Timestamp.valueOf("0001-01-01 00:00:00.123456789")
}
它只是一个虚拟函数,应该 return 具有完全纳秒精度的时间戳。
然后我会做一个udf:
`val u_date123 = sqlContext.udf.register("u_date123", date123 _)`
示例 df:
val theRow =Row("blah")
val theRdd = sc.makeRDD(Array(theRow))
case class X(x: String )
val df = theRdd.map{case Row(s0) => X(s0.asInstanceOf[String])}.toDF()
如果我将 udf 应用于带有字符串列的数据框 df
,它将 return 一个看起来像 '[0001-01-01 00:00:00.123456] 的数据框'
df.select(u_date123($"x")).collect.foreach(println)
我想我找到了问题所在。
在 spark 1.5.1 上,他们将时间戳数据类型的大小从 12 字节更改为 8 字节
我在 spark 1.4.1 上测试过,它产生了完整的纳秒精度。