Genres | Year | Number_Movies
Drama |2015 | 705
Romance|2015 | 203
Comedy |2015 | 586
Drama |2014 | 605
Romance|2014 | 293
Comedy |2014 | 786
Genres | Year | Number_Movies
Drama |2015 | 705
Comedy |2014 | 786
如果可能请帮忙。多谢.
这里有几个可以解决这个问题的选择-
df = spark.createDataFrame([('Drama',2015,705),('Romance',2015,203),('Comedy',2015,586),('Drama',2014,605),('Romance',2014,293),('Comedy ',2014,786)],['Genres','Year','Number_Movies'])
第一个选项:使用窗口函数定义一个等级(分区按年和顺序按Number_Movies desc)。每年数量最多的电影将获得“1”级。
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number,desc
w = Window.partitionBy("Year").orderBy(desc("Number_Movies"))
rank = row_number().over(w).alias('rank')
df.withColumn("rank", rank)\
.where("rank=1")\
.drop("rank")\
.show()
#+-------+----+-------------+
#| Genres|Year|Number_Movies|
#+-------+----+-------------+
#|Comedy |2014| 786|
#| Drama|2015| 705|
#+-------+----+-------------+
第二个选项:获取每年Number_Movies的最大值,然后self加入dataframe以获取类型。
from pyspark.sql.functions import max,col
joining_condition = [col('a.Year') == col('b.Year'), col('a.max_Number_Movies') == col('b.Number_Movies')]
df.groupBy("Year").\
agg(max("Number_Movies").alias("max_Number_Movies")).alias("a").\
join(df.alias("b"), joining_condition).\
selectExpr("b.Genres","b.Year","b.Number_Movies").\
show()
#+-------+----+-------------+
#| Genres|Year|Number_Movies|
#+-------+----+-------------+
#|Comedy |2014| 786|
#| Drama|2015| 705|
#+-------+----+-------------+
我是R的新手,这是我关于堆栈溢出的第一个问题。 我正在努力 要通过引用指定新列,请执行以下操作: 对于每行 使用同一行组中第一行到下一行的值。 这符合一个条件 示例数据: 我想做的是 子集(组)按 对于每行 查找进一步向下的第一行的, 其中,和(找到的行)大于我正在更新的行的 我的预期结果是: 我使用<code>尝试了许多变体。SD,,创建一个新的列,其中包含但实际上没有得到任何结果。非常感谢任何
我有一个很好的方法。这就是它的样子。 我想把这个换成Lambda。但我不知道如何填写if(条件)在外面返回true或false。我知道我也可以在流中完成。有人能举个例子吗?
我正在尝试使用一个do while循环来找出用户是想将一只狗还是一只猫检查到Java的养狗系统中。其思想是,当提示时输入“dog”或“cat”,任何输入都将导致错误,并且他们将再次被提示输入文件名。 如果输入了“cat”或“dog”,那么将为程序分配等效的文件(dogs.txt或cats.txt),然后系统将运行并将数据加载到程序中。 以下是当前的变量: 以及导致问题的方法: 下面是运行代码时打印
我正处于Java的学习阶段。我想用Java编写一个程序,它可以读取一个Excel文件(.xlsx)。此文件有一些列和许多行。我想将数据写入另一个Excel文件(.xlsx),仅满足条件,而不是现有文件中的所有数据。 我的Excel工作表如下所示 我想只过滤那些带有代理Edelweiss的行,并把它放在另一个Excel表中。我知道如何使用Java将一个Excel中的所有数据复制到另一个Excel中。
我正在写一些代码,有些事情让我困惑。我有一个名为的数字数组。现在我想遍历这个列表,如果一个值高于60,例如,我想创建一个新的对象数组(集合),在那里我们存储高值,它的索引来自原始数组。所以以下面的代码为例 控制台。日志输出如下 这个输出是我所需要的,但是如何防止返回未定义的值呢?我考虑过使用数组。但这似乎不合适?我应该使用不同的数组方法吗?我不想使用for循环并推送到一个新数组,除非这是在不返回未
我有一个很管用的方法。这是看起来的样子。 我想把这个换成兰姆达。里面带着shell来了uo,但是我不知道怎么填充if(条件)返回true还是返回false外面。