PySpark转换为数组类型

时间:2017-11-20 21:31:04

标签: pyspark pyspark-sql

我正在尝试在PySpark的DataFrame中的数组列上运行pyspark.sql.functions.explode时遇到以下错误。我已经尝试创建一个UDF来将列转换为python列表(如果它不是列表实例)。但是,这仍然会引发同样的错误。在Pandas中,我通常会拉出行并确定从那里做什么。我不确定如何访问此行以查看数据以了解我需要考虑的条件。

我一般都在寻找调试建议,但如果你知道答案也很棒!

Py4JJavaError: An error occurred while calling o2850.withColumn. : org.apache.spark.sql.AnalysisException: cannot resolve 'explode( {很多{1}}

)' due to data type mismatch: input to function explode should be array or map type, not LongType;;

原始代码

df.schema()

root
 |-- lists: array (nullable = true)
 |    |-- element: long (containsNull = true)
 |-- data: string (nullable=true)

df = df.withColumn("list",df.lists)
df = df.withColumn('list',sf.explode(df.list))

1 个答案:

答案 0 :(得分:1)

没有必要使用withcolumn,你可以直接爆炸数组。

df = spark.read("s3a://path/parquet/*)     
df.select(df['data'],explode(df['lists']).alias('list'))