Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 从spark创建的csv读取的配置单元中的时间戳为空_Scala_Apache Spark_Hive - Fatal编程技术网

Scala 从spark创建的csv读取的配置单元中的时间戳为空

Scala 从spark创建的csv读取的配置单元中的时间戳为空,scala,apache-spark,hive,Scala,Apache Spark,Hive,我输入的数据如下: HEADER_A|HEADER_B|HEADER_C|HEADER_D 2018-09-28 22:12:09.0461760|first|last|123 2018-09-28 22:14:11.0123550|first|second|124 然后我将其读入数据帧,并将其保存为名为temp\u view的临时视图。所有内容都作为字符串读入 然后我将查询此临时视图: val df = sqlContext.sql(""" SELECT from_unixt

我输入的数据如下:

HEADER_A|HEADER_B|HEADER_C|HEADER_D
2018-09-28 22:12:09.0461760|first|last|123
2018-09-28 22:14:11.0123550|first|second|124
然后我将其读入数据帧,并将其保存为名为
temp\u view
的临时视图。所有内容都作为字符串读入

然后我将查询此临时视图:

val df = sqlContext.sql("""
    SELECT
    from_unixtime(unix_timestamp(), 'yyyy-MM-dd HH:mm:ss') as ETL_RunDate,
    HEADER_A as timestamp,
    HEADER_B as string,
    HEADER_c as string,
    HEADER_D as string
    FROM temp_view
""")
然后将数据帧写入文件。这个文件看起来像

2018-10-23 05:32:49|2018-09-28T22:12:09.046Z|first|last|123
2018-10-23 05:32:49|2018-09-28T22:14:11.123Z|first|second|124
如果然后使用此数据作为架构为的配置单元表的数据:

CREATE EXTERNAL TABLE `testdb.testtable`(
  `runts` timestamp COMMENT '',
  `header_a` timestamp COMMENT '',
  `header_b` string COMMENT '',
  `header_c` string COMMENT '',
  `header_d` string COMMENT '')
并查询此表-

select * from testdb.testtable;
header\u a
应为空,因为基础数据在那里


发生这种情况的原因以及我如何解决此问题?

问题是输出文件
yyyy-MM-dd'HH:MM:ss.SSSX
中的时间戳格式不同于默认的蜂巢时间戳格式
yyy-MM-dd HH:MM:ss[.f..]

您有两个选择:

  • 使用默认格式写出文件。您必须将write更新为类似
    df.write.format(“csv”)选项(“dateFormat”、“yyyy-MM-dd hh:MM:ss.ssss”)
  • 更新表的serdeProperty以读取格式–
    ALTER table testtable SET serdeProperty(“timestamp.formats”=“yyy-MM-dd'T'HH:MM:ss.SSSX”)

嘿,您需要指定
serdeproperty
您可以尝试
更改表临时视图集serdeproperty(“timestamp.formats”=“yyyy-MM-dd'T'HH:MM:ss.ssssss”)
。然后,查询df。