当前位置: 首页 > 知识库问答 >
问题:

如何找到一个spark dataframe中所有列的最大值[重复]

国高杰
2023-03-14

共有1个答案

陆翰藻
2023-03-14

无论有多少列或数据类型组合,代码都可以工作。

注意:OP在她的评论中建议,对于字符串列,在分组时取第一个non-null值。

# Import relevant functions
from pyspark.sql.functions import max, first, col

# Take an example DataFrame
values = [('Alice',10,5,None,50),('Bob',15,15,'Simon',10),('Jack',5,1,'Timo',3)]
df = sqlContext.createDataFrame(values,['col1','col2','col3','col4','col5'])
df.show()
+-----+----+----+-----+----+
| col1|col2|col3| col4|col5|
+-----+----+----+-----+----+
|Alice|  10|   5| null|  50|
|  Bob|  15|  15|Simon|  10|
| Jack|   5|   1| Timo|   3|
+-----+----+----+-----+----+

# Lists all columns in the DataFrame
seq_of_columns = df.columns
print(seq_of_columns)
    ['col1', 'col2', 'col3', 'col4', 'col5']

# Using List comprehensions to create a list of columns of String DataType
string_columns = [i[0] for i in df.dtypes if i[1]=='string']
print(string_columns)
    ['col1', 'col4']

# Using Set function to get non-string columns by subtracting one list from another.
non_string_columns = list(set(seq_of_columns) - set(string_columns))
print(non_string_columns)
    ['col2', 'col3', 'col5']

在这里阅读关于first()ungorenulls

# Aggregating both string and non-string columns
df = df.select(*[max(col(c)).alias(c) for c in non_string_columns],*[first(col(c),ignorenulls = True).alias(c) for c in string_columns])
df = df[[seq_of_columns]]
df.show()
+-----+----+----+-----+----+
| col1|col2|col3| col4|col5|
+-----+----+----+-----+----+
|Alice|  15|  15|Simon|  50|
+-----+----+----+-----+----+
 类似资料:
  • 请告诉我如何在数据帧中查找列的值 在@Dadep的答案中,链接给出了正确的答案

  • 有这么多参考文献来寻找大小为k的所有子阵列的最小值/最大值,但是如何以最好的可能方式找到第n个最大值/最小值。如果我们必须找到子阵列的最小值/最大值,那么我们可以使用具有线性时间复杂度的deque解决方案。但是对于第n分钟/最长时间,我无法找到解决方案。 注意:n 例如:arr = {7,1,4,20,11,17,15} n=2,k=4 输出:4,4,11,15

  • 如何在csv文件中查找每列的最小值和最大值(albhabet值除外)。 我所做的是迭代每一行,并将每一列存储在一个hashmap中 然后我算了一下 但是当大数据到来时,在hashmap中保存那么多数据并不是更好,然后找到最小值和最大值。我如何用其他方式找到最小值/最大值。 最新消息 没有得到预期的结果。 解决方案:计算csv文件中列的最小值和最大值

  • 问题内容: 我想知道是否有人可以帮助我找到一组变量的最大值并将它们分配给另一个变量。这是我的代码段,可能有助于理解我在说什么。 问题答案: 在Java中,您可以像这样使用Math.max: 不是最优雅的,但它会起作用。 另外,为获得更强大的解决方案,请定义以下功能: 您可以通过以下方式致电给您:

  • 我记录一个设备,每15分钟读取3个值(,,)。它们可以重复。 我需要找出每小时在该间隔内读取的12个值中最大的3个值是什么。我对它们何时发生不感兴趣,只对它们的值感兴趣。 目前,我的算法还远远不够高效和快速: 在每组中循环: 我想去掉这个循环,使用原生的pandas/numpy方法。可能吗? 编辑:在这篇文章的末尾提出了一个可行的解决方案 以下是代码: 回报: 解决方案 我在代码中实现这个解决方案

  • 我正在使用python开发web框架。下面是我的数据库。这个数据库名是fruit。 我在用炼金术。所以类名是水果。我应该写些什么来得到下面的结果。。?我想从“名称”列中获取值。 [‘苹果’、‘梨’、‘葡萄’] 有没有办法直接执行SQL查询。。?