【发布时间】:2021-12-23 23:30:21
【问题描述】:
我正在摄取 json 文件,其中整个数据有效负载位于单行单列上。 此列是我想要分解的复杂对象数组,以便每个对象代表一行。 我正在使用 Databricks 笔记本和 spark.read.json() 将文件内容加载到数据框。 这导致数据帧只有一行,数据有效负载在单列中。(我们称之为 obj_array) 我遇到的问题是 obj_array 列大于 2GB,因此 Spark 无法处理 explode() 函数。 是否有任何替代方法可以将 json 文件拆分为更易于管理的块? 谢谢。 代码示例...
#set path to file
jsonFilePath='/mnt/datalake/jsonfiles/filename.json
#read file to dataframe
#entitySchema is a schema struct previously extracted from a sample file
rawdf=spark.read.option("multiline","true").schema(entitySchema).format("json").load(jsonFilePath)
#rawdf contains a single row of file_name,timestamp_created, and obj_array #obj_array is an array field containing the entire data payload (>2GB)
explodeddf=rawdf.selectExpr("file_name","timestamp_created","explode(obj_array) as data")
#this column explosion fails due to obj_array exceeding 2GB
【问题讨论】:
-
您能否提供一个代码示例,可能有助于理解您在做什么。
-
#set path to file jsonFilePath='/mnt/datalake/jsonfiles/filename.json #read file to dataframe #entitySchema 是从示例文件中提取的模式结构 rawdf = spark.read.option( "multiline","true").schema(entitySchema).format("json").load(jsonFilePath) #rawdf 包含一行 file_name,timestamp_created 和 obj_array #obj_array 是一个包含整个数据有效负载的数组字段( >2GB) explodeddf=rawdf.selectExpr("file_name","timestamp_created","explode(obj_array) as data") #由于obj_array超过2GB,此列爆炸失败
-
抱歉...上面的代码示例的格式非常糟糕...我会在没有 cmets 的情况下再次添加
-
jsonFilePath='/mnt/datalake/jsonfiles/big_file.json rawdf = spark.read.option("multiline","true").schema(entitySchema).format("json")。 load(jsonFilePath) explodeddf=rawdf.selectExpr("file_name","timestamp_created","explode(obj_array) as data")
-
没有帮助...为什么当我粘贴到 cmets 框中时,记事本中的行格式不保留??