在googleclouddataproc中运行spark作业。使用bigquery连接器将作业输出的json数据加载到bigquery表中。
bigquery标准sql数据类型文档说明支持数组类型。
我的scala代码是:
val outputDatasetId = "mydataset"
val tableSchema = "["+
"{'name': '_id', 'type': 'STRING'},"+
"{'name': 'array1', 'type': 'ARRAY'},"+
"{'name': 'array2', 'type': 'ARRAY'},"+
"{'name': 'number1', 'type': 'FLOAT'}"+
"]"
// Output configuration
BigQueryConfiguration.configureBigQueryOutput(
conf, projectId, outputDatasetId, "outputTable",
tableSchema)
//Write visits to BigQuery
jsonData.saveAsNewAPIHadoopDataset(conf)
但作业引发了以下异常:
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Invalid value for: ARRAY is not a valid value",
"reason" : "invalid"
} ],
"message" : "Invalid value for: ARRAY is not a valid value"
}
at
com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel.waitForCompletionAnThrowIfUploadFailed(AbstractGoogleAsyncWriteChannel.java:432)
at com.google.cloud.hadoop.util.AbstractGoogleAsyncWriteChannel.close(AbstractGoogleAsyncWriteChannel.java:287)
at com.google.cloud.hadoop.io.bigquery.BigQueryRecordWriter.close(BigQueryRecordWriter.java:358)
at org.apache.spark.rdd.PairRDDFunctions$$anonfun$saveAsNewAPIHadoopDataset$1$$anonfun$12$$anonfun$apply$5.apply$mcV$sp(PairRDDFunctions.scala:1124)
at org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1366)
... 8 more
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException:
400 Bad Request
这是遗留问题还是标准sql问题?或者spark的bigquery连接器不支持数组类型?
2条答案
按热度按时间92dk7w1h1#
这些是字符串数组吗?整数?我相信使用这个api,您需要设置
type
元素类型,例如。STRING
或者INT64
,但使用mode
的REPEATED
. bigqueryapi还没有完全更新到在任何地方都使用标准sql类型,因此您需要改用type+模式的遗留约定。vql8enpb2#
而不是使用
type=ARRAY
,尝试设置type
就像你平时一样,但也要设置钥匙mode=REPEATED
.例如,字符串数组将定义为: