Oracle 到 Spark/Hive:如何将 "greatest" 函数的使用转换为 Spark 1.6 数据帧

Oracle to Spark/Hive: how to convert use of "greatest" function to Spark 1.6 dataframe

oracle中的

Table有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 列中。 请帮忙。

这使用 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|
+--------+