我拥有的数据集充满了嵌套字段。例如,data.take(1)
的输出给出了 9 列,其中第 4 列 (c4) 有 3 个子字段,c4 的第 1 列有 3 个子字段,依此类推。
格式看起来有点像这样
[A,B,C,[[d1,d2,d3],D2,D3],E,[F1,[f1,[f21,f22,f23],f3,f4],F3,F4],G,H,I]
我想要一个数组数据结构的数组(然后可以展开为单个数组)。
只是为了让数据看起来更清晰:
A
B
C
D
-D1
-d1
-d2
-d3
-D2
-D3
E
F
-F1
-F2
-f1
-f2
-f21
-f22
-f23
-f3
-f4
-F3
-F4
G
H
I
当然,我可以编写一个解析程序,递归地搜索给定记录的子字段,并生成这种树结构(作为数组数组)。然而,我希望在Spark中有一个更简单、更高效的预构建例程,以直接的方式处理这个问题。
Spark-Scala或PySpark中的任何答案都将受到欢迎。
如果您已经使用spark将数据帧/数据集加载到内存中,有两种方法可以帮助您。尝试< code>df.printSchema()和< code>df.schema,其中< code>df是引用数据集的变量。第一个将在屏幕上打印带有数据类型的模式,第二个将返回可由您的代码遍历的< code>StructType对象。
更新:
所以现在你要方便地选择嵌套字段。
假设您有以下代码:
import org.apache.spark.sql.SparkSession
object Question51360175 extends App{
val session = SparkSession.builder()
.appName("spark-app").master("local[*]").getOrCreate()
import session.implicits._
case class TopLevel(someField: String, nestedLevel: NestedLevel)
case class NestedLevel(key: Int, value: String)
val df = Seq(
TopLevel("first", NestedLevel(1, "Onnu")),
TopLevel("second", NestedLevel(2, "Rendu"))
).toDF
df.printSchema()
df.show()
}
这将给你这种输出
root
|-- someField: string (nullable = true)
|-- nestedLevel: struct (nullable = true)
| |-- key: integer (nullable = false)
| |-- value: string (nullable = true)
+---------+-----------+
|someField|nestedLevel|
+---------+-----------+
| first| [1, Onnu]|
| second| [2, Rendu]|
+---------+-----------+
现在,如果你想得到嵌套列,例如,你只想要嵌套类中的value
列NestedLevel
,你可以只编写df.select("nestedLevel.value"). show()
,它会返回你
+-----+
|value|
+-----+
| Onnu|
|Rendu|
+-----+
这是我的 mongodb 集合的架构的一部分: 我已经获取了集合并将其存储在Spark数据框中,现在正在尝试提取变量列中的最内层值。 这工作得非常好,我能够得到数据结构的内部结构。 然而,一旦我尝试进一步深入: 我得到一个无效的语法错误。 df _ temp = df1 . select(df1 . variables . actives . data . 0 . active)< br > ^
我试图在elasticsearch中对嵌套字段进行排序,但在按升序排序时,它总是在排序列表的顶部显示带有空值嵌套字段的文档。我希望排序(升序和降序),并希望空值嵌套字段文档出现在排序列表的末尾。 这是我正在使用的排序查询: 下面是我应用的与嵌套的“标记”字段相关的映射: 样品有效载荷:
在嵌套字段中读取MongoDB更新数据后,我使用 我如何访问那个元素?(只是子元素而不是整个文档)< br >例如< code > db . users . findone({ _ id:' 123 ' },{ ' $ elem ':" friends . 0 . emails . 0 . email " }); 例如:< br >如果它是一个JavaScript对象,它将是< br> 如果是Py
问题内容: 在Spark中有一个数据框: 如何将字段重命名为? [更新]: 不适用于嵌套字段,因此我尝试了这种hacky和不安全的方法: 我知道设置私有属性不是一个好习惯,但我不知道其他为df设置架构的方法 我觉得我是在一个正确的轨道,但仍显示为旧名,虽然是 问题答案: 蟒蛇 无法修改单个嵌套字段。您必须重新创建一个整体结构。在这种特殊情况下,最简单的解决方案是使用。 首先是一堆进口商品: 和示例
我需要将该模式格式提取到如下所示的治疗区域行项目:
我的json结构如下: 表示JSON继续使用更多。我想从这个JSON中检索。我的代码如下所示: 但是,使用此代码,将始终 我尝试了不同的路径,但总是得到一个空的