SQL SPARK - 使用2个数据帧创建查询

时间:2018-03-22 11:49:41

标签: sql apache-spark pyspark

我有2个数据帧加载了以下结构。

我的第一个数据框叫做dfBooks。

+----------+--------------------+--------------------+-------------------+--------------------+--------------------+--------------------+--------------------+
|      ISBN|          Book-Title|         Book-Author|Year-Of-Publication|           Publisher|         Image-URL-S|         Image-URL-M|         Image-URL-L|
+----------+--------------------+--------------------+-------------------+--------------------+--------------------+--------------------+--------------------+
|0195153448| Classical Mythology|  Mark P. O. Morford|               2002|Oxford University...|http://images.ama...|http://images.ama...|http://images.ama...|
|0002005018|        Clara Callan|Richard Bruce Wright|               2001|HarperFlamingo Ca...|http://images.ama...|http://images.ama...|http://images.ama...|

我的第二个名为dfBooks_Rating。

+-------+----------+-----------+
|User-ID|      ISBN|Book-Rating|
+-------+----------+-----------+
| 276725|034545104X|          0|
| 276726|0155061224|          5|
| 276727|0446520802|          0|
| 276729|052165615X|          3|
| 276729|0521795028|          6|
| 276733|2080674722|          0|
| 276736|3257224281|          8|
| 276737|0600570967|          6|
| 276744|038550120X|          7|
| 276745| 342310538|         10|
| 276746|0425115801|          0|
| 276746|0449006522|          0|
| 276746|0553561618|          0|
| 276746|055356451X|          0|
| 276746|0786013990|          0|
| 276746|0786014512|          0|
| 276747|0060517794|          9|
| 276747|0451192001|          0|
| 276747|0609801279|          0|
| 276747|0671537458|          9|
+-------+----------+-----------+

问题,获得每个出版商的最高费率

我计算它的想法是使用groupBy函数按 ISBN 对每个数据框进行分组,但我认为它应该是更好的方法。

这是我加载dfs的代码。

def crearDataFrame(nombre_fichero):
    df = spark.read.format("csv").option("header", "true").option("delimiter", ";").load(nombre_fichero)
    return df

数据框加载:

dfUser = crearDataFrame("BX-Users.csv")
dfBooks = crearDataFrame("BX-Book.csv")

我想将每个人分组以创建正确的查询。

df_ = dfUser.join(dfBooks, dfUser.ISBN == dfBooks.ISBN, 'inner').show()

您是否知道同时使用两个df创建查询是否可行?

谢谢大家。

1 个答案:

答案 0 :(得分:0)

这应计算每个发布商的最高评级。

dfBooks
    .select("ISBN", "Publisher")
    .join(dfBooks_Rating, Seq("ISBN"))
    .groupBy("Publisher")
    .agg(max($"Book-Rating") as "maxRating")
    .show