1

oracle中的表有37列。列的名称是:年、月、d1、d2 ....d34。d1..d34 中的数据都是整数。还有一个名为 maxd 的列是空白的。对于每一行,我必须找到 d1,d2....d34 中的最大值并将其放入 maxd 列。甲骨文代码:

UPDATE documents set maxd = GREATEST(d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17,d18,d19,d20,d21,d22,d23,d24,d25,d26,d27,d28,d29,d30,d31,d32,d33,d34);

我在 spark1.6 中创建了一个包含 37 列的确切集合的数据框。现在,需要编写代码来计算 d1,d2...d34 中每一行的最大值并将其存储在 maxd 列中。请帮忙。

4

1 回答 1

0

这使用 Spark 1.6

df = sqlContext.createDataFrame([(10, 400, 30)], ['x', 'y', 'z'])

>>> df.show()
+---+---+---+
|  x|  y|  z|
+---+---+---+
| 10|400| 30|
+---+---+---+

>>> df.select(greatest(df.x,df.y,df.z).alias('greatest')).show()
+--------+
|greatest|
+--------+
|     400|
+--------+

更新

我刚刚了解到您可以通过greatest(*df.columns)而不是df.x, df.y and so on. 这在没有时非常有用。的列是巨大的。所以上面可以改写为

>>> df.select(greatest(*df.columns).alias('greatest')).show()
+--------+
|greatest|
+--------+
|     400|
+--------+
于 2018-02-08T10:15:51.640 回答