假设我有一个这样的ruby数组:
values = ['val_a', 'val_b',..., 'val_z'] # 26 values
带键的哈希
hash = {a: nil, b: nil, ... , z: nil} # 26 keys
我知道数组已排序,我知道哈希的键是排序的,我知道数组和哈希的大小相同。
我如何优雅地水合哈希值,以便我最终得到
{a: 'val_a', b: 'val_b', ... , z: 'val_z'}
答案 0 :(得分:8)
df.show
+----+----+----+
|col1|col2|col3|
+----+----+----+
| A| B| C|
| D| E| F|
| X| Y| Z|
| A| N| Z|
+----+----+----+
import org.apache.spark.sql.functions._
val query = df.columns.map(x => collect_set(col(x) ).as(x) )
df.groupBy(lit(1))
.agg(collect_set($"col1"), query: _*)
.select(df.columns.map(col(_)): _* )
.show
+---------+------------+---------+
| col1| col2| col3|
+---------+------------+---------+
|[A, D, X]|[B, E, Y, N]|[C, F, Z]|
+---------+------------+---------+
请注意,在某些(大多数?)语言中,散列/映射的键是无序的,因此无效。 Ruby<的情况也是如此。 1.9,但是,从那时起,它们将被保证订购(插入订单)。
答案 1 :(得分:3)
从Ruby 2.4.0开始,您可以执行以下操作:
hash.transform_values.with_index { |v,i| values[i] }
使用Hash#transform_values
,意图很明确。它的危险对手Hash#transform_values!
也可以使用。