apache-spark - BigQuery 中的 DateTime 数据类型
问题描述
我有一个分区表,其中一列是 DateTime 类型,并且该表在同一列上分区。根据 spark-bigquery 文档,对应的 Spark SQL 类型是 String 类型。 https://github.com/GoogleCloudDataproc/spark-bigquery-connector
我尝试做同样的事情,但我遇到了数据类型不匹配的问题。
代码片段:
ZonedDateTime nowPST = ZonedDateTime.ofInstant(Instant.now(), TimeZone.getTimeZone("PST").toZoneId());
df = df.withColumn("createdDate", lit(nowPST.toLocalDateTime().toString()));
错误:
Caused by: com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryException: Failed to load to <PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME> in job JobId{project=<PROJECT_ID>, job=<JOB_ID>, location=US}. BigQuery error was Provided Schema does not match Table <PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>. Field createdDate has changed type from DATETIME to STRING
at com.google.cloud.spark.bigquery.BigQueryWriteHelper.loadDataToBigQuery(BigQueryWriteHelper.scala:156)
at com.google.cloud.spark.bigquery.BigQueryWriteHelper.writeDataFrameToBigQuery(BigQueryWriteHelper.scala:89)
... 36 more
解决方案
由于 Spark 不支持DateTime
,BigQuery 连接器不支持写入DateTime
- 没有可以使用的等效 Spark 数据类型。我们正在探索增强 DataFrame 元数据的方法,以支持 BigQuery 支持的类型,而不是 Spark ( DateTime
, Time
, Geography
) 支持的类型。
目前请将此字段设为字符串,并在 BigQuery 端进行转换。
推荐阅读
- python - 如何使用 def 开始密码验证代码并在 Python 中返回 T/F?
- reactjs - antd Table onRow onClick 到另一个组件
- python - 不同网络上不同机器上的 Python 代码并行化
- snowflake-cloud-data-platform - 查询雪花 s3 外部文件
- javascript - 不明白为什么要使用 let i=2 来操作函数碰撞
- mysql - 规范化后从表中删除多值数据
- java - 忽略加载急切的一对一休眠
- python - ImportError:无法从“tensorflow.keras.preprocessing”(未知位置)导入名称“image_dataset_from_directory”
- html - 如何在引导工具提示中显示表单元素?
- c# - 如何比较数组以查看元素重复了多少次?