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