如何将 WrappedArray 转换为 spark 中的字符串?
How to convert WrappedArray to string in spark?
我有一个 json 文件,其中包含如下所示的嵌套数组,
| | |-- coordinates: array (nullable = true)
| | | |-- element: array (containsNull = true)
| | | | |-- element: array (containsNull = true)
| | | | | |-- element: array (containsNull = true)
| | | | | | |-- element: long (containsNull = true)
我已经用Spark读取了json并爆破了数组
explode(col("list_of_features.geometry.coordinates"))
其中returns值如下,
WrappedArray(WrappedArray(WrappedArray(1271700, 6404100), WrappedArray(1271700, 6404200), WrappedArray(1271600, 6404200), WrappedArray(1271600, 6404300),....
但原始输入看起来像没有 WrappedArray。
有点像,
[[[[1271700,6404100],[1271700, 6404200],[1271600, 6404200]
最终目的是将没有WrappedArray
的坐标(可能是String)存储在csv文件中,供Hive读取数据。
explode 之后有没有办法只用适当的方括号括起来的坐标。
或者我可以使用 replace 来替换 RDD 中的 WrappedArray
字符串值吗?
您可以使用 UDF
到 flatten
WrappedArray
并将其 String
值设为
//udf
val concatArray = udf((value: Seq[Seq[Seq[Seq[Long]]]]) => {
value.flatten.flatten.flatten.mkString(",")
})
现在使用 udf
将 create/replace 列作为
df1.withColumn("coordinates", concatArray($"coordinates") )
这应该给你一个用 ","
分隔的 string
替换 WrappedArray
更新: 如果您希望使用与 string
相同的格式并带括号,那么您可以像
val concatArray = udf((value: Seq[Seq[Seq[Seq[Long]]]]) => {
value.map(_.map(_.map(_.mkString("[", ",", "]")).mkString("[", "", "]")).mkString("[", "", "]"))
})
输出:
[[[[1271700,6404100][1271700,6404200][1271600,6404200]]]]
希望对您有所帮助!
我有一个 json 文件,其中包含如下所示的嵌套数组,
| | |-- coordinates: array (nullable = true)
| | | |-- element: array (containsNull = true)
| | | | |-- element: array (containsNull = true)
| | | | | |-- element: array (containsNull = true)
| | | | | | |-- element: long (containsNull = true)
我已经用Spark读取了json并爆破了数组
explode(col("list_of_features.geometry.coordinates"))
其中returns值如下,
WrappedArray(WrappedArray(WrappedArray(1271700, 6404100), WrappedArray(1271700, 6404200), WrappedArray(1271600, 6404200), WrappedArray(1271600, 6404300),....
但原始输入看起来像没有 WrappedArray。
有点像,
[[[[1271700,6404100],[1271700, 6404200],[1271600, 6404200]
最终目的是将没有WrappedArray
的坐标(可能是String)存储在csv文件中,供Hive读取数据。
explode 之后有没有办法只用适当的方括号括起来的坐标。
或者我可以使用 replace 来替换 RDD 中的 WrappedArray
字符串值吗?
您可以使用 UDF
到 flatten
WrappedArray
并将其 String
值设为
//udf
val concatArray = udf((value: Seq[Seq[Seq[Seq[Long]]]]) => {
value.flatten.flatten.flatten.mkString(",")
})
现在使用 udf
将 create/replace 列作为
df1.withColumn("coordinates", concatArray($"coordinates") )
这应该给你一个用 ","
分隔的 string
替换 WrappedArray
更新: 如果您希望使用与 string
相同的格式并带括号,那么您可以像
val concatArray = udf((value: Seq[Seq[Seq[Seq[Long]]]]) => {
value.map(_.map(_.map(_.mkString("[", ",", "]")).mkString("[", "", "]")).mkString("[", "", "]"))
})
输出:
[[[[1271700,6404100][1271700,6404200][1271600,6404200]]]]
希望对您有所帮助!