2017-07-18 141 views
1

我不應該問這個問題,我真的不想問,但我迷路了。我看到很多以wordcount爲例的教程。但我有問題,瞭解如何與sparkSql 使用它,例如,我有以下查詢Spark:使用map並使用SparkSql減少

Dataset<Row> totalItem = spark.sql(" select icode from bigmart.o_sales"); 

它使我的數據集?現在我可以迭代totalItem和打印結果,但我想要計算該項目發​​生的次數。這可以用map和reduce來完成,但我不知道該怎麼做。 此外,如果有人用java知道sparkSql在這裏我們可以存儲結果變量,而不是使用show(),我會很gratefull

回答

1

如果你想算一個項目多少次發生時,您可以使用sparksql查詢本身做如下:

spark.sql("select icode,count(icode) from bigmart.o_sales group by icode")

,或者你可以按如下方式使用API​​:

val df=spark.table("bigmart.o_sales").groupBy($"icode").count.show 

希望它能回答您的問題

+0

謝謝,我正在寫很長的路。但我仍然有一些問題 – Saurab

+0

它的舊的寫作方式,可能不會被優化,但如果你正在做的事情是不可能的與SQL或dsl比你可以使用地圖和減少。如果你使用SQL然後優化計劃生成避免不必要的計算 –

+0

so,doing this 'JavaPairRDD counts = totalItem.toJavaRDD()。mapToPair(x - > new Tuple2 <>(x.toString(),1))。reduceByKey((x,y ) - > x + y); System.out.println(counts.collect()。get(8));' 不好? – Saurab