Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Apache spark 提取键值时,维护MapType中键的顺序_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Apache spark 提取键值时,维护MapType中键的顺序

Apache spark 提取键值时,维护MapType中键的顺序,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,提取键值时,如何保持MapType中键的相同顺序?数据从avro文件加载,avro文件的模式如下所示 df=spark.createDataFrame( [ ( “a键”, {“FName”:“John”,“LName”:“Citizen”,“Age”:“30”,“Mobile”:“00000000”}, “约翰” ) ], [“somekey”、“metadata”、“name”、] ) 选择(分解(df.metadata)).show() 我认为键的顺序混乱是由于分区造成的 +-----

提取键值时,如何保持
MapType
中键的相同顺序?数据从avro文件加载,avro文件的模式如下所示

df=spark.createDataFrame(
[
(
“a键”,
{“FName”:“John”,“LName”:“Citizen”,“Age”:“30”,“Mobile”:“00000000”},
“约翰”
)
], 
[“somekey”、“metadata”、“name”、]
)
选择(分解(df.metadata)).show()
我认为键的顺序混乱是由于分区造成的

+------+--------+
|键值|
+------+--------+
|LName |公民|
|移动电话| 00000000|
|FName | John|
|年龄| 30|
+------+--------+
我期望以下输出,即数据帧中定义的相同序列

+------+--------+
|键值|
+------+--------+
|FName | John|
|LName |公民|
|年龄| 30|
|移动电话| 00000000|
+------+--------+

顺序的变化是由于Python
dict
类型造成的。Python字典不是有序对象,因此,数据以特定顺序发送到spark,这可能与您想要的顺序不同

如果直接读取带有Spark的文件或表,则不应出现相同的问题


但是在此之后,
爆炸
不遵守地图中的顺序。因此,您需要使用函数

df.select(posexplode(df.metadata)).collect()[Row(pos=0,key=u'LName',value=u'Citizen')、Row(pos=1,key=u'Mobile',value=u'00000000')、Row(pos=2,key=u'FName',value=u'John Row(pos=3,key=u'Age',value=u'30')]
位置不分解possible@Prathik你读过我写的吗?我不是说posexplode会解决这个问题,我是说这个问题是因为他同时使用了Python dict和explode。@Steven我直接从一个avro文件中读取,并且键的顺序是错误的。就像你提到的,它是dict类型的,所以我认为我们无法控制订单。您能想出其他方法来获取原始序列中的键吗?不要依赖spark数据帧中的行序列。Spark数据帧没有顺序的概念,这是允许并行独立处理每一行的原因。(可以通过指定要排序的列来强制排序。)