【发布时间】:2017-07-18 00:40:59
【问题描述】:
在 Scala/Spark 中,有一个数据框:
val dfIn = sqlContext.createDataFrame(Seq(
("r0", 0, 2, 3),
("r1", 1, 0, 0),
("r2", 0, 2, 2))).toDF("id", "c0", "c1", "c2")
我想计算一个新列maxCol,其中包含对应于最大值(每行)的列的名称。在这个例子中,输出应该是:
+---+---+---+---+------+
| id| c0| c1| c2|maxCol|
+---+---+---+---+------+
| r0| 0| 2| 3| c2|
| r1| 1| 0| 0| c0|
| r2| 0| 2| 2| c1|
+---+---+---+---+------+
实际上数据框有 60 多列。因此需要一个通用的解决方案。
Python Pandas 中的等价物(是的,我知道,我应该与 pyspark 进行比较...)可能是:
dfOut = pd.concat([dfIn, dfIn.idxmax(axis=1).rename('maxCol')], axis=1)
【问题讨论】:
-
你一般有多少列?
-
我有大约 60 列
-
与最大列相比有多少?
-
谢谢@Wilmerton!这是一个很好的解决方案,展示了 Scala/Spark 数据帧与 Python/Pandas 数据帧的优雅;)(同样,pandas 数据帧没有分布,因此比较并不真正相关)
标签: scala apache-spark dataframe apache-spark-sql argmax