【问题标题】:How to overcome the 2GB limit for a single column value in Spark如何克服 Spark 中单列值的 2GB 限制
【发布时间】: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 框中时,记事本中的行格式不保留??

标签: dataframe apache-spark


【解决方案1】:
  1. 当您达到这样的限制时,您需要重新定义问题。 Spark 在列中阻塞了 2Gigs,这是一个非常合理的阻塞点。为什么不编写自己的 custom data reader.(Presenstation) 以您认为合理的方式发出记录? (可能是让文件保持原样的最佳解决方案。)

  2. 您可能可以通过简单的文本读取来读取所有记录,然后在之后的列中“绘制”。您可以使用 SQL 技巧尝试使用窗口/滞后来扩展和填充行。

  3. 您可以进行文件级清理/格式化,以使数据更易于管理,以便开箱即用的工具使用。

【讨论】:

    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 2010-10-10
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多