जावा का उपयोग करके BigQuery में Array <T> सहेजें
Nov 26 2020
मैं स्पार्क बिग क्वेरी कनेक्टर का उपयोग करके बिग क्वेरी में डेटा को बचाने की कोशिश कर रहा हूं। मान लीजिए कि मेरे पास नीचे जैसा जावा पूजो है
@Getter
@Setter
@AllArgsConstructor
@ToString
@Builder
public class TagList {
private String s1;
private List<String> s2;
}
अब जब मैं इस पूजो को बिग क्वेरी में सहेजने की कोशिश कर रहा हूं, तो मुझे गलती से नीचे फेंक दिया
Caused by: com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryException: Failed to load to test_table1 in job JobId{project=<project_id>, job=<job_id>, location=US}. BigQuery error was Provided Schema does not match Table <Table_Name>. Field s2 has changed type from STRING to RECORD
at com.google.cloud.spark.bigquery.BigQueryWriteHelper.loadDataToBigQuery(BigQueryWriteHelper.scala:156)
at com.google.cloud.spark.bigquery.BigQueryWriteHelper.writeDataFrameToBigQuery(BigQueryWriteHelper.scala:89)
... 35 more
नमूना कोड:
Dataset<TagList> mapDS = inputDS.map((MapFunction<Row, TagList>) x -> {
List<String> list = new ArrayList<>();
list.add(x.get(0).toString());
list.add("temp1");
return TagList.builder()
.s1("Hello World")
.s2(list).build();
}, Encoders.bean(TagList.class));
mapDS.write().format("bigquery")
.option("temporaryGcsBucket","<bucket_name>")
.option("table", "<table_name>")
.option("project", projectId)
.option("parentProject", projectId)
.mode(SaveMode.Append)
.save();
बड़ी क्वेरी तालिका:
create table <dataset>.<table_name> (
s1 string,
s2 array<string>,
)
PARTITION BY
TIMESTAMP_TRUNC(_PARTITIONTIME, HOUR);
जवाब
DavidRabinowitz Nov 30 2020 at 18:59
कृपया मध्यवर्ती को परिवर्तित कर AVRO या ORC करें। Parquet का उपयोग करते समय, क्रमांकन एक मध्यवर्ती संरचना बनाता है। इस पर अधिक देखेंhttps://github.com/GoogleCloudDataproc/spark-bigquery-connector#properties