Я пытаюсь получить доступ к вложенным атрибутам json-файла, хранящимся в таблице (паркет). Я могу получить доступ ко всем записям таблицы на выбрать * из теста;Как получить доступ к вложенным атрибутам в spark sql
Однако, я не в состоянии получить доступ вложенных атрибутов, написав запрос как: вкладки валь = sqlContext.sql («выберите текст, user.screen_name из тестового LIMIT 1»)
схема, как показано ниже:
|-- text: string (nullable = true)
| |-- truncated: boolean (nullable = true)
| |-- user: struct (nullable = true)
| | |-- created_at: string (nullable = true)
| | |-- id: long (nullable = true)
| | |-- id_str: string (nullable = true)
| | |-- is_translator: boolean (nullable = true)
| | |-- lang: string (nullable = true)
| | |-- location: string (nullable = true)
| | |-- name: string (nullable = true)
| | |-- screen_name: string (nullable = true)
Ниже мой код:
import scala.tools.nsc.doc.model.Object
import scala.tools.nsc.interactive.Main
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.sql._
import org.apache.spark.sql.SQLContext
object SimpleSparkSQL {
def main(args:Array[String]) {
val path = args(0);
val conf = new SparkConf().setAppName("Simple Application").setMaster("local[2]").set("spark.executor.memory", "1g")
val sc = new SparkContext(conf)
val data = sc.textFile(path)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
val sqlc = new SQLContext(sc)
val df = sqlc.read.json(data)
df.select("text", "user.screen_name").write.format("parquet").save("staging.parquet")
val parquetFile = sqlContext.read.parquet("staging.parquet")
parquetFile.registerTempTable("test")
//= 514621627494322176 where user.screen_name='abyschan'
val tab= sqlContext.sql("select * from test LIMIT 1")
df.printSchema()
tab.collect().foreach{println}
}
}
ПРИМЕЧАНИЕ: выберите * от тест работает нормально, но когда я пытаюсь выбрать user.screen_name (вложенный атрибут) Я являюсь GETT ошибка «Не удается разрешить имя пользователя.screen_name»
Возможно, вы должны включить в свой вопрос, какое поведение вы ожидаете и что вы на самом деле получаете. для указателей на задание вопросов [ask} –