[英]reading from a spark.structType in scala
我正在運行以下scala代碼:
val hiveContext=new org.apache.spark.sql.hive.HiveContex(sc)
val df=hiveContext.sql("SELECT * FROM hl7.all_index")
val rows=df.rdd
val firstStruct=rows.first.get(4)
//I know the column with index 4 IS a StructType
val fs=firstStruct.asInstanceOf[StructType]
//now it fails
//what I'm trying to achieve is
log.println(fs.apply("name"))
我知道firstStruct是structType,並且StructFields的名稱之一是“ name”,但是在嘗試強制轉換時似乎失敗了。我被告知spark / hive結構與scala不同,但是,為了使用StructType I需要
import org.apache.spark.sql.types._
所以我認為它們實際上應該是同一類型
我在這里看: https : //github.com/apache/spark/blob/master/sql/catalyst/src/main/scala/org/apache/spark/sql/types/StructType.scala
為了了解如何到達structField。
謝謝!
模式類型是邏輯類型。 它們不會一對一地映射到具有該模式類型的列中的對象類型。
例如,Hive / SQL使用BIGINT
表示64位整數,而SparkSQL使用LongType
。 Scala中數據的實際類型是Long
。 這是您遇到的問題。
Hive中的struct
( StructType
中的StructType)由數據幀中的Row
表示。 因此,您要執行的操作是以下之一:
row.getStruct(4)
import org.apache.spark.sql.Row
row.getAs[Row](4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.