我正在hdfs中存储的orc文件上创建一个外部表。我有 process_timestamp
数据文件中带有时间戳的列。
创建表之后,我执行了 MSCK REPAIR TABLE <TABLE-NAME>
. 但是,在查询表timestamp时,列返回空值,而不是实际的时间戳
from datetime import date
from pyspark.sql.functions import lit, to_date, from_unixtime, unix_timestamp
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("test_conn") \
.getOrCreate()
df = spark.createDataFrame([('Alice', 1)])
timestamp = today.strftime("%Y-%m-%d %H:%M:%S")
df = df.withColumn('process_timestamp', unix_timestamp(lit(timestamp), 'yyyy-MM-dd HH:mm:ss').cast('timestamp'))
``` `process_timestamp` 看起来像这样 `'2019-09-09 00:00:00'` 在兽人档案里
模式看起来也不错:
--process_timestamp: timestamp (nullable = true)
但是在查询时,会返回空值 `process_timestamp - NULL` 我试着像下面那样设置serde属性,但没有用。
ALTER TABLE <table_name> SET SERDEPROPERTIES ("timestamp.formats"="yyyy-MM-dd'T'HH:mm:ss");
请帮我解决这个问题。查询时如何从外部表返回实际的时间戳值?任何帮助都将不胜感激。
1条答案
按热度按时间s3fp2yjn1#
我通过将文件直接保存在hdfs位置作为orc并在数据上创建外部表来解决了这个问题。问题是如何将文件保存到hdfs位置。
在上面的语句中,我添加了partitionby(),并对外部表进行了msck,效果非常好。