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|
+--------+
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|
+--------+