Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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
Python Pyspark从结构化流媒体中的映射数组中提取值_Python_Apache Spark_Pyspark_Nested_Spark Structured Streaming - Fatal编程技术网

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]