0

我正在爲配置單元表中的數據集構建模式。如何在Hive表中爲數據集創建模式?

enter image description here

處理之後我必須寫入數據到S3。

我需要根據日期附加json圖像格式重新組織和分組用戶id交互準備。

爲了構建這個模式,我準備了一個帶有數組的結構類型。

fields = [ 
    StructField("expUserId", StringType(), True), 
    StructField("recordDate", StringType(), True), 
    StructField("siteId", StringType(), True), 
    StructField("siteName", StringType(), True), 
    StructField("itineraryNumber", StringType(), True), 
    StructField("travelStartDate", StringType(), True), 
    StructField("travelEndDate", StringType(), True), 
    StructField("destinationID", StringType(), True), 
    StructField("lineOfBusiness", StringType(), True), 
    StructField("pageViewMap", MapType(StringType(),ArrayType(StructType([ 
     StructField("PageId", StringType(), True), 
     StructField("count", LongType(), True)]))), True) 
    ] 
schema = StructType(fields) 
return schema 

該模式是否正確?如何將DataFrame轉換爲下面的json模式類型。

+0

請問您可以替換截圖並使用原始文本進行復制。這將會更容易給你一些關於如何處理數據集的額外提示。謝謝! –

回答

0

爲什麼不使用SparkSession來讀取json使用schema來顯示解釋結構?

spark.read.json(inputPath).schema 
0

如果數據集是在蜂巢,使用JDBC或蜂巢集成層讀取它(見Hive TablesJDBC To Other Databases星火的正式文件)。

它分別與spark.read.format("jdbc")...load()spark.read.table一樣簡單(參見官方文檔中的DataFrameReader API)。

什麼是對這種做法很好的是,星火可以自動推斷架構適合你(這樣你就可以離開了這一點,並有更多的時間爲自己!)

一旦數據集是在你的手中作爲DataFrameDataset ,您可以按以下保存到S3 JSON格式:

inventoryDF.write.format("json").save("s3n://...") 

JSON DatasetsDataFrameWriter API官方文檔。

我強烈建議讓Spark努力工作,所以你不必這樣做。

+0

謝謝Jacek,sqlContext.read.parquet('s3path')和df.printScema工作 –

+0

@ Pradeep.D.s好!接受它作爲答案(也許upvote)當你找到時間。謝謝! –

0

您可以使用自己定義的模式從json創建新的數據框。

val myManualSchema = new StructType(Array(
    new StructField("column1", StringType, true), 
    new StructField("column2", LongType, false) 
)) 

val myDf = spark.read.format("json") 
       .schema(myManualSchema) 
       .load('/x/y/zddd.json') 

無需手動指定模式即可創建數據框。所以spark會通過評估輸入文件來生成模式。

val df = spark.read.format("json").load("/x/y/zddd.json") 

使用下面的命令從json讀取模式。

val SchJson = spark.read.format("json").load("/x/y/zddd.json").schema