A. *_* R. 14 python literals apache-spark pyspark pyspark-sql
假设我有一个包含数字1-10的numpy数组a.所以a是[1 2 3 4 5 6 7 8 9 10].
现在,我还有一个Python Spark数据帧,我想要添加我的numpy数组a.我认为一列文字将完成这项工作.所以我做了以下事情:
df = df.withColumn("NewColumn", F.lit(a))
这不起作用.错误是"不支持的文字类型类java.util.ArrayList".
现在,如果我只尝试数组中的一个元素,如下所示,它可以工作.
df = df.withColumn("NewColumn", F.lit(a[0]))
有没有办法可以做我正在尝试的事情?我一直在努力完成我想完成的任务,这是我最接近完成它的任务.我查看了所有相关的Stack Overflow问题,但我没有得到我想要的答案.任何帮助表示赞赏.谢谢.
Ram*_*jan 20
您可以使用array 内置的功能,如
a = [1,2,3,4,5,6,7,8,9,10]
df = spark.createDataFrame([['a b c d e f g h i j '],], ['col1'])
df = df.withColumn("NewColumn", F.array([F.lit(x) for x in a]))
df.show(truncate=False)
你应该得到
+--------------------+-------------------------------+
|col1                |NewColumn                      |
+--------------------+-------------------------------+
|a b c d e f g h i j |[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]|
+--------------------+-------------------------------+
root
 |-- col1: string (nullable = true)
 |-- NewColumn: array (nullable = false)
 |    |-- element: integer (containsNull = false)
#udf function
def arrayUdf():
    return a
callArrayUdf = F.udf(arrayUdf, T.ArrayType(T.IntegerType()))
#calling udf function
df = df.withColumn("NewColumn", callArrayUdf())
输出与for循环方式相同
更新
我正在粘贴@ pault的评论,如下所示
您可以使用
map以下方法隐藏循环:df.withColumn("NewColumn", F.array(map(F.lit, a)))
| 归档时间: | 
 | 
| 查看次数: | 5818 次 | 
| 最近记录: |