簡體   English   中英

從scala中的spark.structType讀取

[英]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中的structStructType中的StructType)由數據幀中的Row表示。 因此,您要執行的操作是以下之一:

row.getStruct(4)

import org.apache.spark.sql.Row
row.getAs[Row](4)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM