当前位置: 首页 > 知识库问答 >
问题:

Spark Dataframe:行对象分隔符

端木兴国
2023-03-14

提前谢谢。

您好,我正在使用 spark 数据帧和 scala 进行一些数据处理,我有一个要求,我需要从 parquet 文件中读取具有相同数据类型的多个列,即在我的情况下是结构类型,以处理和创建新数据帧具有与结构类型字段相同的架构,即 field1、field2 和 field3,并使用下面显示的所有列示例中的数据填充数据帧。

例如,假设我有3列

a)column1: struct (nullable = true)
     |-- field1: string (nullable = true)
     |-- field2: string (nullable = true)
     |-- field3: string (nullable = true)

b)column2: struct (nullable = true)
     |-- field1: string (nullable = true)
     |-- field2: string (nullable = true)
     |-- field3: string (nullable = true)

c)column3: struct (nullable = true)
     |-- field1: string (nullable = true)
     |-- field2: string (nullable = true)
     |-- field3: string (nullable = true)

我能够使用下面的代码片段从列中读取所有值

dataframe.select("column1","column2","column3")

上面的代码返回Row对象

[[column1field1,column1field2,column1field3],null,null]
[null,[column2field1,column2field2,column2field3],null]
[null,null,[column3field1,column3field2,column3field3]]
[[column1field1,column1field2,some record, with multiple,separator],null,null]

这里的问题是,我能够使用“,”分隔符从row对象读取值,并能够用3个字段填充数据帧,但是由于这些字段是字符串,所以在parquet中有记录,我在字符串数据本身中有多个“,”分隔符,如上面最后一个Row对象中所示,因此导致数据帧模式中的问题,因为我使用“,”分隔符来检索Row对象的值,它给了我3个以上的字段。我该如何摆脱这个错误?在Spark中,有什么规定可以改变行数组值的对象分隔符来解决这个问题吗?

共有1个答案

倪举
2023-03-14

是的,您可以加载不同的分隔符,如

sqlContext.load("com.databricks.spark.csv", yourSchema, Map("path" -> yourDataPath, "header" -> "false", "delimiter" -> "^"))

运筹学

sqlContext.read.format("com.databricks.spark.csv").schema(yourSchema).options(Map("path" -> schema, "header" -> "false", "delimiter" -> "^")).load()

具体取决于你使用的是哪个版本的 Spark。

至于字符串中的分隔符,您要么需要在加载之前使用分隔符','对它们进行转义,要么使用不同的分隔符。

 类似资料:
  • 如果我要打印一个列表,我可以做: 输出如下: 在python中有没有一个函数可以这样打印列表呢?

  • 有没有办法在gridview中显示行之间的(水平)分隔线? 我试着在每个网格项目下面放置一个小的分隔线,但是这不是一个解决方案,因为当一行没有完全填满项目时,它不会跨越整行。 有没有办法在每一行之间添加一个图像?我只能找到改变行之间空间的方法。

  • 问题内容: 我有一个监视系统,它每n秒收集一次数据(n大约为10,但有所不同)。我想每隔15分钟汇总一次收集的数据。有没有一种方法可以将时间戳记值合并为15分钟的块,以便分组工作? 问题答案:

  • 我目前正在研究一些工作中的想法,我有一个想法需要帮助。 我有一堆函数对象(想想像神经网络这样昂贵的东西)。它们以不同的间隔应用于线性缓冲区(比如一个由浮点或字节组成的数组)。所以它们看起来是这样的(把Start和End想象成“将对象应用到buf[开始:结束]”): 可能会有一些跳过(例如,参见C的开头vs B的结尾) 间隔肯定会有变化,无论是正的还是负的(例如,B可能会从变为。 当这种情况发生时,

  • 我有一个关于KML中的组的问题。 我有一个数据集,由50个对象组成。这些对象具有属性,即F.E严重性。有没有可能根据这些严重性类对我的KML文档进行分类?(1/1.5/2)还是基于任何其他属性?我已经手动创建了文件夹,但数据集越大,工作量就越大...我也想为对象着色,基于分类。附上我将添加我的文档。也许有人知道如何处理这件事?

  • 问题内容: 我有一个这样的表: 我需要一个查询以n分钟的间隔对记录进行分组。 例如,输出(按60分钟分组): 到目前为止,由于间隔介于0到60分钟之间,因此我一直在使用此查询按10分钟间隔进行分组: 但是现在间隔可以是例如 125436758 分钟。 我无法创建新表,并且用户定义的间隔必须为n分钟。我正在使用SQL SERVER2012。谢谢。 问题答案: