Python Pyspark从结构化流媒体中的映射数组中提取值
我有以下模式:Python Pyspark从结构化流媒体中的映射数组中提取值,python,apache-spark,pyspark,nested,spark-structured-streaming,Python,Apache Spark,Pyspark,Nested,Spark Structured Streaming,我有以下模式: root |-- sents: array (nullable = false) | |-- element: integer (containsNull = true) |-- metadata: array (nullable = true) | |-- element: map (containsNull = true) | | |-- key: string | | |-- value: string (valueConta
root
|-- sents: array (nullable = false)
| |-- element: integer (containsNull = true)
|-- metadata: array (nullable = true)
| |-- element: map (containsNull = true)
| | |-- key: string
| | |-- value: string (valueContainsNull = true)
在一个表中,它如下所示:
+----------+---------------------------------------------------------------------+
|sents |metadata |
+----------+---------------------------------------------------------------------+
|[1, -1, 0]|[[confidence -> 0.4991], [confidence -> 0.5378], [confidence -> 0.0]]|
+----------+---------------------------------------------------------------------+
如何从数组列中的映射列表中访问te值
谢谢这里有两个选项,使用Spark中的和高阶函数 选项1 explode+pyspark访问器 首先,我们将数组的元素分解为一个新列,然后使用键元数据访问映射以检索值: 从pyspark.sql.functions导入col、explode、expr df=spark.createDataFrame[ [{置信度:0.4991},{置信度:0.5378},{置信度:0.0}] ],[元数据] df.selectColMetadata.aliasmetadata\ .selectcolmetadata[confidence].aliasvalue +---+ |价值观| +---+ |0.4991| |0.5378| |0.0 | +---+ 选项2变换+分解 在这里,我们使用transform将贴图的值提取到一个新数组中,然后将其分解: df.selectExplorTransferrMMetadata,i->i['confidence']。别名值
在Spark中有两个使用和高阶函数的选项 选项1 explode+pyspark访问器 首先,我们将数组的元素分解为一个新列,然后使用键元数据访问映射以检索值: 从pyspark.sql.functions导入col、explode、expr df=spark.createDataFrame[ [{置信度:0.4991},{置信度:0.5378},{置信度:0.0}] ],[元数据] df.selectColMetadata.aliasmetadata\ .selectcolmetadata[confidence].aliasvalue +---+ |价值观| +---+ |0.4991| |0.5378| |0.0 | +---+ 选项2变换+分解 在这里,我们使用transform将贴图的值提取到一个新数组中,然后将其分解: df.selectExplorTransferrMMetadata,i->i['confidence']。别名值
到目前为止,您尝试了什么?到目前为止,我尝试创建一个在单独列中包含每个值的df,问题是解决方案不是动态的,因为我无法进行.collect或.take结构化流式处理。我试图在数组列sents和映射数组列metadata之间执行聚合函数,但我不确定如何继续。AVG[sents_i*metadata_i]对于RangeLenMetadata中的i,到目前为止您尝试了什么?到目前为止,我尝试创建一个包含单独列中每个值的df,问题是解决方案不是动态的,因为我无法执行.collect或.take结构化流式处理。我试图在数组列sents和映射数组列metadata之间执行聚合函数,但我不确定如何继续。rangelenmetadata中i的平均值[sents_i*metadata_i]