Pyspark如何将行追加到BigQuery表

Pyspark如何将行追加到BigQuery表,pyspark,google-bigquery,Pyspark,Google Bigquery,我有一个Pyspark程序,最后需要将行附加到Bigquery表中。我第一次能够创建表并将行加载到其中,但不知道如何继续追加更多行 这是我第一次加载到BQ的代码片段- mydf.write.format('bigquery') \ .option('table', 'my-project.my-dataset.my-table') \ .option("temporaryGcsBucket","my-bucket") \ .save() 有人能帮

我有一个Pyspark程序,最后需要将行附加到Bigquery表中。我第一次能够创建表并将行加载到其中,但不知道如何继续追加更多行

这是我第一次加载到BQ的代码片段-

mydf.write.format('bigquery') \
        .option('table', 'my-project.my-dataset.my-table') \
        .option("temporaryGcsBucket","my-bucket") \
        .save()
有人能帮我吗

完全例外,我在“追加”行时得到-

原因:org.apache.spark.SparkException:写入时任务失败 排。 位于org.apache.spark.sql.execution.datasources.FileFormatWriter$.org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask(FileFormatWriter.scala:257) 位于org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$write$1.apply(FileFormatWriter.scala:170) 位于org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$write$1.apply(FileFormatWriter.scala:169) 位于org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90) 位于org.apache.spark.scheduler.Task.run(Task.scala:123) 位于org.apache.spark.executor.executor$TaskRunner$$anonfun$10.apply(executor.scala:408) 位于org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360) 位于org.apache.spark.executor.executor$TaskRunner.run(executor.scala:414) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ... 1更多原因:net.razorvine.pickle.PickleException:构造ClassDict的参数应为零(对于 rdkit.Chem.rdchem.Mol) 位于net.razorvine.pickle.objects.ClassDictConstructor.construct(ClassDictConstructor.java:23) net.razorvine.pickle.Unpickler.load\u reduce(Unpickler.java:707) 位于net.razorvine.pickle.Unpickler.dispatch(Unpickler.java:175) 位于net.razorvine.pickle.Unpickler.load(Unpickler.java:99) 加载net.razorvine.pickle.Unpickler.load(Unpickler.java:112) 位于org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$evaluate$1.apply(BatchEvalPythonExec.scala:90) 位于org.apache.spark.sql.execution.python.BatchEvalPythonExec$$anonfun$evaluate$1.apply(BatchEvalPythonExec.scala:89) 位于scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:435) 位于scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:441) 位于scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409) 位于scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:409) 位于org.apache.spark.sql.catalyst.expressions.GeneratedClass$GenerateEditorForCodeGenStage2.processNext(未知 (来源) 位于org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43) 位于org.apache.spark.sql.execution.whisttagecodegenexec$$anonfun$13$$anon$1.hasNext(whisttagecodegenexec.scala:636) 位于org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask$3.apply(FileFormatWriter.scala:244) 位于org.apache.spark.sql.execution.datasources.FileFormatWriter$$anonfun$org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask$3.apply(FileFormatWriter.scala:242) 位于org.apache.spark.util.Utils$.tryWithSafeFinallyAndFailureCallbacks(Utils.scala:1394) 位于org.apache.spark.sql.execution.datasources.FileFormatWriter$.org$apache$spark$sql$execution$datasources$FileFormatWriter$$executeTask(FileFormatWriter.scala:248)


只需将“保存模式”设置为“附加”:

df.write \
  .format('bigquery') \
  .option('table', 'my-project.my-dataset.my-table') \
  .option("temporaryGcsBucket","my-bucket") \
  .mode("append") \
  .save()

如果查看源代码,连接器仅支持保存模式
覆盖
附加

你好@Blackishop,我收到一个错误-
py4j.protocol.Py4JJavaError:调用o75.save时出错:java.lang.RuntimeException:未能写入com.google.cloud.spark.BigQuery.BigQueryWriteHelper.writeDataFrameToBigQuery(BigQueryWriteHelper.scala:62)
-同时尝试“附加”行。你能帮忙吗?你好,这是你收到的完整错误信息吗?你能把完整的异常添加到问题中吗?嗨@Blackishop,我已经将异常消息添加到了我的原始问题中。你能帮我找出我做错了什么吗?这个错误看起来非常普遍,也许通过更多关于BigQuery模式的上下文,我们可以找出什么是错的。