How to set read timeout configuration in spark-bigquery-connector?

Viewed 258

We are using spark-bigquery-connector to pull the data from BigQuery using Spark. Intermittently, we face read timeout issues. Exception: com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryException: Read timed out. How do I increase the default timeout value? Below is a sample code snippet showing how we pull the data from BigQuery

sparkSession.read
      .format("com.google.cloud.spark.bigquery")
      .load("data-set")
      .select("col1", "col 2")
      .show(20)

Below are the configuration we set at sparkConf level

sparkConf.set("viewsEnabled", true)
    sparkConf.set("parentProject", "<parentProject>")
    sparkConf.set("materializationProject", "<materializationProject>")
    sparkConf.set("materializationDataset", "<materializationDataset>")
    sparkConf.set("credentials", "<>")

If we use BigQueryClient, timeout can be configures as follows,

BigQuery bigquery = BigQueryOptions.getDefaultInstance()
     .setRetrySettings(RetrySettings.newBuilder()
     .setMaxAttempts(10)
     .setRetryDelayMultiplier(1.5)
     .setTotalTimeout(Duration.ofMinutes(5))
.build()).getService();

But, how can we tune/configure the read timeout value when using sparkSession to read the data.

Exception Trace:

com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryException: Read timed out
    at com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.translate(HttpBigQueryRpc.java:115)
    at com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.getTable(HttpBigQueryRpc.java:287)
    at com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryImpl$17.call(BigQueryImpl.java:717)
    at com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryImpl$17.call(BigQueryImpl.java:714)
    at com.google.cloud.spark.bigquery.repackaged.com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
    at com.google.cloud.spark.bigquery.repackaged.com.google.cloud.RetryHelper.run(RetryHelper.java:76)
    at com.google.cloud.spark.bigquery.repackaged.com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
    at com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryImpl.getTable(BigQueryImpl.java:713)
    at com.google.cloud.spark.bigquery.BigQueryRelationProvider.createRelationInternal(BigQueryRelationProvider.scala:75)
    at com.google.cloud.spark.bigquery.BigQueryRelationProvider.createRelation(BigQueryRelationProvider.scala:45)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:340)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:239)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:227)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:174)
0 Answers
Related