Chi*_*iMo 5 arrays scala apache-spark apache-spark-sql
所以我需要创建一个从 1 到 100 枚举的数字数组,作为每行的值作为一个额外的列。
使用array()
带有一堆文字值的函数是可行的,但是肯定有一种方法可以使用/转换 ScalaRange(a to b)
而不是单独列出每个数字?
spark.sql("SELECT key FROM schema.table")
.otherCommands
.withColumn("range", array(lit(1), lit(2), ..., lit(100)))
Run Code Online (Sandbox Code Playgroud)
类似于:
withColumn("range", array(1 to 100))
Run Code Online (Sandbox Code Playgroud)
Lui*_*.G. 10
从 Spark 2.4 开始,您可以使用 [sequence][1] 函数如果您有以下数据框:
df.show()
+--------+
|column_1|
+--------+
| 1|
| 2|
| 3|
| 0|
+--------+
Run Code Online (Sandbox Code Playgroud)
如果您使用从 0 到 column_1 的序列函数,您会得到以下结果:
df.withColumn("range", sequence(lit(0), col("column_1"))).show()
+--------+------------+
|column_1| range|
+--------+------------+
| 1| [0, 1]|
| 2| [0, 1, 2]|
| 3|[0, 1, 2, 3]|
| 0| [0]|
+--------+------------+
Run Code Online (Sandbox Code Playgroud)
对于这种情况,请使用以下命令设置这两个值lit
:
df.withColumn("range", sequence(lit(0), lit(100)))
Run Code Online (Sandbox Code Playgroud)
您可以使用函数内的内置函数作为map
函数使用lit
array
df.withColumn("range", array((1 to 100).map(lit(_)): _*))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9711 次 |
最近记录: |