如何将SQL查询输出(dataframe)转换为Spark Scala中键值对的数组列表?

如何将SQL查询输出(dataframe)转换为Spark Scala中键值对的数组列表?,scala,apache-spark,Scala,Apache Spark,我在spark scala shell中为SFPD事件创建了一个数据帧。我查询了Category count的数据,结果是datafame。我想用Wisp将这些数据绘制成图形。这是我的数据框 +-------+----+ |类别|猫数| +-------+----+ |盗窃/盗窃| 362266| |其他罪行| 257197| |非刑事犯罪| 189857| |袭击| 157529| |车辆盗窃| 109733| |毒品/麻醉品| 108712| |故意破坏行为| 91782| |认股权证|

我在spark scala shell中为SFPD事件创建了一个数据帧。我查询了Category count的数据,结果是datafame。我想用Wisp将这些数据绘制成图形。这是我的数据框

+-------+----+ |类别|猫数| +-------+----+ |盗窃/盗窃| 362266| |其他罪行| 257197| |非刑事犯罪| 189857| |袭击| 157529| |车辆盗窃| 109733| |毒品/麻醉品| 108712| |故意破坏行为| 91782| |认股权证| 85837| |入室盗窃| 75398| |可疑OCC | 64452|
+-------+----+ 在pyspark中,它将如下所示。Scala将非常类似

创建测试数据

rdd = sc.parallelize([(0,1), (0,1), (0,2), (1,2), (1,1), (1,20), (3,18), (3,18), (3,18)])
df = sqlContext.createDataFrame(rdd, ["id", "score"])
映射测试数据,将行的RDD重新格式化为元组的RDD。然后,使用collect将所有元组提取为一个列表

df.rdd.map(lambda x: (x[0], x[1])).collect()
[0,1,0,1,0,2,1,2,1,1,1,20,3,18,3,18,3,18]


下面是一些可以帮助您将其转换为pyspark中Scala Spark代码的方法,如下所示。Scala将非常类似

创建测试数据

rdd = sc.parallelize([(0,1), (0,1), (0,2), (1,2), (1,1), (1,20), (3,18), (3,18), (3,18)])
df = sqlContext.createDataFrame(rdd, ["id", "score"])
映射测试数据,将行的RDD重新格式化为元组的RDD。然后,使用collect将所有元组提取为一个列表

df.rdd.map(lambda x: (x[0], x[1])).collect()
[0,1,0,1,0,2,1,2,1,1,1,20,3,18,3,18,3,18]


以下是可以帮助您将其转换为Scala Spark代码的方法

您可以用您尝试过的方法更新您的问题吗?@eliasah我已经更新了问题,您可以用您尝试过的方法更新您的问题吗?@eliasah我已经更新了问题,我已经在Scala中尝试过。这是我的命令t.rdd.mapx=>x0,x1.collect,并将结果作为数组[Any,Any]的键值对获取。如何使用数组[String,Int]获得相同的值。使用t.rdd.mapx=>x0.toString,x.getInt1.collect获得它。谢谢你的帮助。我在scala试过这个。这是我的命令t.rdd.mapx=>x0,x1.collect,并将结果作为数组[Any,Any]的键值对获取。如何使用数组[String,Int]获得相同的值。使用t.rdd.mapx=>x0.toString,x.getInt1.collect获得它。谢谢你的帮助。