read empty dataframe when one column result by spark iotdb connector
- Ngôn ngữ chính
- Java
- Star
- 6.4k
- Fork
- 1.2k
- Merge trung bình
- 1 ngày 23 giờ
- Pull request đã merge (30 ngày)
- 115
Mô tả
**环境**
- Iotdb 0.9.3 & 0.11.2
- spark 2.3.3
- spark-iotdb-connector 0.11.2
**问题**
spark读取iotdb数据后,返回一个空的DataFrame对象
**分析**
0.9.3中执行带聚合函数的sql,如`select count(root.ln.wf01.wt01.status) from root`,返回为两列,一列是时间列,一列是值,但是在0.11.2中返回的是一列,但是spark-iotdb-connector中并未处理这种,在生成schame的时候,从2开始遍历,导致只有一列的数据返回空schema,代码如下:
spark-iotdb-connector\src\main\scala\org\apache\iotdb\spark\db\Converter.scala
```
def toSparkSchema(options: IoTDBOptions): StructType = {
Class.forName("org.apache.iotdb.jdbc.IoTDBDriver")
val sqlConn: Connection = DriverManager.getConnection(options.url, options.user, options.password)
val sqlStatement: Statement = sqlConn.createStatement()
val hasResultSet: Boolean = sqlStatement.execute(options.sql)
val fields = new ListBuffer[StructField]()
if (hasResultSet) {
val resultSet: ResultSet = sqlStatement.getResultSet
val resultSetMetaData: ResultSetMetaData = resultSet.getMetaData
val printTimestamp = !resultSet.asInstanceOf[IoTDBJDBCResultSet].isIgnoreTimeStamp
if (printTimestamp) {
fields += StructField(SQLConstant.TIMESTAMP_STR, LongType, nullable = false)
}
val colCount = resultSetMetaData.getColumnCount
for (i <- 2 to colCount) {
.....
}
StructType(fields.toList)
}
else {
StructType(fields)
}
}
```
需要加个startCol变量,来确定是从2开始遍历还是1,如下:
```
var startCol = 1
if (printTimestamp) {
fields += StructField(SQLConstant.TIMESTAMP_STR, LongType, nullable = false)
startCol = 2
}
val colCount = resultSetMetaData.getColumnCount
for (i <- startCol to colCount) {
.....
}
```
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu với spark-iotdb-connector/src/main/scala/org/apache/iotdb/spark/db/Converter.scala và kiểm tra toSparkSchema, sau đó tái hiện truy vấn tổng hợp được báo cáo bằng các phiên bản IoTDB và Spark được liệt kê. Xác minh rằng kết quả gồm một cột tạo ra schema Spark và DataFrame không rỗng thay vì schema rỗng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- scala, spark, sql
- Lĩnh vực
- databases
- Loại issue
- Lỗi
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 58/100