Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用嵌套阵列和StructType Spark Scala展平拼花地板文件_Scala_Apache Spark_Apache Spark Sql_Parquet_Flatten - Fatal编程技术网

使用嵌套阵列和StructType Spark Scala展平拼花地板文件

使用嵌套阵列和StructType Spark Scala展平拼花地板文件,scala,apache-spark,apache-spark-sql,parquet,flatten,Scala,Apache Spark,Apache Spark Sql,Parquet,Flatten,我期待着在Spark中使用Scala高效地动态展平镶木地板文件。我想知道实现这一目标的有效方法是什么 拼花文件包含多个深度级别的多个数组和结构类型嵌套。拼花文件模式将来可能会更改,因此我无法硬编码任何属性。所需的最终结果是平铺分隔文件 使用flatmap和递归分解的解决方案有效吗 模式示例: |-- exCar: array (nullable = true) | |-- element: struct (containsNull = true) | | |-- exCar

我期待着在Spark中使用Scala高效地动态展平镶木地板文件。我想知道实现这一目标的有效方法是什么

拼花文件包含多个深度级别的多个数组和结构类型嵌套。拼花文件模式将来可能会更改,因此我无法硬编码任何属性。所需的最终结果是平铺分隔文件

使用flatmap和递归分解的解决方案有效吗

模式示例:

|-- exCar: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- exCarOne: string (nullable = true)
 |    |    |-- exCarTwo: string (nullable = true)
 |    |    |-- exCarThree: string (nullable = true)
 |-- exProduct: string (nullable = true)
 |-- exName: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- exNameOne: string (nullable = true)
 |    |    |-- exNameTwo: string (nullable = true)
 |    |    |-- exNameThree: string (nullable = true)
 |    |    |-- exNameFour: string (nullable = true)
 |    |    |-- exNameCode: array (nullable = true)
 |    |    |    |-- element: struct (containsNull = true)
 |    |    |    |    |-- exNameCodeOne: string (nullable = true)
 |    |    |    |    |-- exNameCodeTwo: string (nullable = true)
 |    |    |-- exColor: array (nullable = true)
 |    |    |    |-- element: struct (containsNull = true)
 |    |    |    |    |-- exColorOne: string (nullable = true)
 |    |    |    |    |-- exColorTwo: string (nullable = true)
 |    |    |    |    |-- exWheelColor: array (nullable = true)
 |    |    |    |    |    |-- element: struct (containsNull = true)
 |    |    |    |    |    |    |-- exWheelColorOne: string (nullable = true)
 |    |    |    |    |    |    |-- exWheelColorTwo: string (nullable = true)
 |    |    |    |    |    |    |--exWheelColorThree: string (nullable =true)
 |    |    |-- exGlass: string (nullable = true)
 |-- exDetails: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- exBill: string (nullable = true)
 |    |    |-- exAccount: string (nullable = true)
 |    |    |-- exLoan: string (nullable = true)
 |    |    |-- exRate: string (nullable = true)
所需的输出模式:

 exCar.exCarOne
 exCar.exCarTwo
 exCar.exCarThree
 exProduct
 exName.exNameOne
 exName.exNameTwo
 exName.exNameThree
 exName.exNameFour
 exName.exNameCode.exNameCodeOne
 exName.exNameCode.exNameCodeTwo
 exName.exColor.exColorOne
 exName.exColor.exColorTwo
 exName.exColor.exWheelColor.exWheelColorOne
 exName.exColor.exWheelColor.exWheelColorTwo
 exName.exColor.exWheelColor.exWheelColorThree
 exName.exGlass
 exDetails.exBill
 exDetails.exAccount
 exDetails.exLoan
 exDetails.exRate

有两件事需要做:

1) 将数组列从最外层的嵌套数组分解为位于内部的数组:分解
exName
(为您提供许多包含
exColor
的json行),然后分解
exColor
,允许您访问
exWheelColor
,等等


2) 将嵌套的json投影到单独的列。

需要做两件事:

1) 将数组列从最外层的嵌套数组分解为位于内部的数组:分解
exName
(为您提供许多包含
exColor
的json行),然后分解
exColor
,允许您访问
exWheelColor
,等等


2) 将嵌套的json投影到一个单独的列。

对,我认为第二步就是这个问题的基础所在。如果没有“自连接”,如何避免这样做。例如,分解后的列作为dataframe exName.exNameOne与exName.exNameTwo连接,与exName.exNameCode.exNameCodeOne连接,依此类推。这将产生重大的扩展问题。如果您已经知道要访问数组中的哪些元素,可以直接这样做:元素/模式是动态的,因此,无法使用硬编码解决方案。在我看来,您选择的列名
exName.exColor.exWheelColor.exWheelColor.exWheelColorOne/Two/Three
,似乎您完全知道自己想要什么。哪一个btw是将一行结构化数据转换为一个固定模式的一行非结构化atomar列的绝对要求。该模式将从拼花文件中提取。例如,v1.00和一周后的v1.01可能有一个模式,因此需求需要考虑到这一点。所以这个文件包含了那个特定时间的模式。对了,在第二步,我认为这是这个问题的基础。如果没有“自连接”,如何避免这样做。例如,分解后的列作为dataframe exName.exNameOne与exName.exNameTwo连接,与exName.exNameCode.exNameCodeOne连接,依此类推。这将产生重大的扩展问题。如果您已经知道要访问数组中的哪些元素,可以直接这样做:元素/模式是动态的,因此,无法使用硬编码解决方案。在我看来,您选择的列名
exName.exColor.exWheelColor.exWheelColor.exWheelColorOne/Two/Three
,似乎您完全知道自己想要什么。哪一个btw是将一行结构化数据转换为一个固定模式的一行非结构化atomar列的绝对要求。该模式将从拼花文件中提取。例如,v1.00和一周后的v1.01可能有一个模式,因此需求需要考虑到这一点。因此,该文件包含该特定时间的模式。