Scala spark dataframe排序映射列保存到配置单元返回随机状态

Scala spark dataframe排序映射列保存到配置单元返回随机状态,scala,dictionary,apache-spark-sql,spark-dataframe,Scala,Dictionary,Apache Spark Sql,Spark Dataframe,我是spark新手,我尝试在spark dataframe中使用udf对map type列进行排序,然后我尝试将数据保存到hive,代码如下: val vectorHead = udf { (z: SparseVector, x: SparseVector, y: mutable.WrappedArray[String]) => var map2 = Map.empty[String, Double] for (i <- x.values.indices) { i

我是spark新手,我尝试在spark dataframe中使用udf对map type列进行排序,然后我尝试将数据保存到hive,代码如下:

val vectorHead = udf { (z: SparseVector, x: SparseVector, y: mutable.WrappedArray[String]) =>

  var map2 = Map.empty[String, Double]

  for (i <- x.values.indices) {
    if (x.values(i) * z.values(i) >= threshold && y(i)!="") {
      map2+=(y(i)->x.values(i)* z.values(i))
    }
  }

  ListMap(map2.toSeq.sortBy(-_._2):_*)

}

val rescaledDataNew = dataFrame.withColumn("words_with_tf*idf", vectorHead(dataFrame("TFFeatures"), dataFrame("IDFFeatures"), dataFrame("new_words"))).drop("words","TFFeatures","IDFFeatures")

println("This is the new data after drop low TF*IDF")
rescaledDataNew.show()
rescaledDataNew.createTempView("TEST")
rescaledDataNew.sqlContext.sql("DROP TABLE IF EXISTS " + dataSavePath)
rescaledDataNew.sqlContext.sql("CREATE TABLE " + dataSavePath + " AS SELECT * FROM TEST")
我想要的是:

{"花桥镇":10.032949,"游艇":8.91278,"美食":6.978342,"青咖喱鸡":6.914152,"翠园":6.1228666}
何时将代码更改为

ListMap(map2.toSeq.sortBy(-_._2):_*).toString
结果是:

Map{"花桥镇"->10.032949,"游艇"->8.91278,"美食"->6.978342,"青咖喱鸡"->6.914152,"翠园"->6.1228666}

那么,有人能告诉我应该怎么做才能得到我想要的吗?

这似乎是show()方法的问题。尝试将df写入一个文件,它应该按您想要的顺序排序。

show()方法似乎有问题。尝试将df写入一个文件,它应该按您想要的顺序排序。

我使用的是:导入scala.collection.immutable。{ListMap,Map}我不理解您的问题。
ListMap(map2.toSeq.sortBy(-):\u*)
是否已经解决了您的问题?不,当使用df.show()时它不起作用,它仍然是随机的。我使用的是:导入scala.collection.immutable。{ListMap,Map}我不理解您的问题。
ListMap(map2.toSeq.sortBy(-uu.\u 2):\u*)
是否已经解决了您的问题?不,使用df.show()时它不起作用,它仍然是随机的
Map{"花桥镇"->10.032949,"游艇"->8.91278,"美食"->6.978342,"青咖喱鸡"->6.914152,"翠园"->6.1228666}