Update from Sync Service
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
|
||||
## 1. 利用Restful接口读取大量数据时报Timeout错误
|
||||
|
||||
```shell
|
||||
py4j.protocol.Py4JJavaError: An error occurred while calling o84.load.
|
||||
: java.sql.SQLException: ERROR (2318): Read timed out
|
||||
at com.taosdata.jdbc.TSDBError.createSQLException(TSDBError.java:72)
|
||||
at com.taosdata.jdbc.utils.HttpClientPoolUtil.execute(HttpClientPoolUtil.java:131)
|
||||
at com.taosdata.jdbc.rs.RestfulStatement.execute(RestfulStatement.java:66)
|
||||
at com.taosdata.jdbc.rs.RestfulStatement.executeQuery(RestfulStatement.java:37)
|
||||
at com.taosdata.jdbc.rs.RestfulPreparedStatement.executeQuery(RestfulPreparedStatement.java:45)
|
||||
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:61)
|
||||
at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation$.getSchema(JDBCRelation.scala:210)
|
||||
at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35)
|
||||
at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:317)
|
||||
at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223)
|
||||
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211)
|
||||
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167)
|
||||
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
|
||||
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
|
||||
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
|
||||
at java.lang.reflect.Method.invoke(Method.java:498)
|
||||
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
|
||||
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
|
||||
at py4j.Gateway.invoke(Gateway.java:282)
|
||||
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
|
||||
at py4j.commands.CallCommand.execute(CallCommand.java:79)
|
||||
at py4j.GatewayConnection.run(GatewayConnection.java:238)
|
||||
at java.lang.Thread.run(Thread.java:748)
|
||||
```
|
||||
|
||||
1. 错误原因:restful接口默认等待数据返回时间为5000ms,当数据量较大时等待时间超过5000ms导致超时;
|
||||
2. 解决方法:延长等待的时间;
|
||||
3. 代码:pyspark中可以用下面两种方法设置等待时间
|
||||
1. 方法一,在url中加入设置参数httpSocketTimeout=xx
|
||||
```python
|
||||
df = spark.read\
|
||||
.format("jdbc")\
|
||||
.option("driver", "com.taosdata.jdbc.rs.RestfulDriver")\
|
||||
.option("url", "jdbc:TAOS-RS://ip:port/db?user=user&password=password&httpSocketTimeout=xx")\
|
||||
.option("query", "select * from test.test")\
|
||||
.load()
|
||||
```
|
||||
2.方法二,在option中加入设置参数httpSocketTimeout
|
||||
```python
|
||||
df = spark.read\
|
||||
.format("jdbc")\
|
||||
.option("driver", "com.taosdata.jdbc.rs.RestfulDriver")\
|
||||
.option("url", "jdbc:TAOS-RS://ip:port/db?user=user&password=password")\
|
||||
.option("httpSocketTimeout", "xx") \
|
||||
.option("query", "select * from test.test")\
|
||||
.load()
|
||||
```
|
||||
Reference in New Issue
Block a user