Skip to main content
 首页 » 编程设计

python之Pyspark之withColumn 在调用空数据框时不起作用

2024年08月15日33dyllove98

我正在为某些要求创建一个空数据框,当我在其上调用 withColumn 函数时,我得到了列,但数据为空,如下所示-

schema = StructType([]) 
df = sqlContext.createDataFrame(sc.emptyRDD(), schema) 
json = list(map(lambda row: row.asDict(True), df.collect())) 
df.show() 
 
++ 
|| 
++ 
++ 
 
df= df.withColumn('First_name',F.lit('Tony'))\ 
                    .withColumn('Last_name',F.lit('Chapman'))\ 
                .withColumn('Age',F.lit('28')) 
df.show() 
 
+----------+---------+---+ 
|First_name|Last_name|Age| 
+----------+---------+---+ 
+----------+---------+---+ 

这是什么原因?如何解决?

请您参考如下方法:

这是预期的结果 - withColumn 意味着 spark 将迭代所有行,然后为每一行添加一列。由于您的数据框是空的,因此没有任何可迭代的内容

如果你想将一些数据放入数据框中,你需要使用并行化

from pyspark.sql import Row 
l = [('Tony','Chapman',28)] 
rdd = sc.parallelize(l) 
rdd_rows = rdd.map(lambda x: Row(First_Name=x[0],Last_Name=x[1] Age=int(x[2]))) 
df = sqlContext.createDataFrame(rdd_rows) 

或者从 Spark 2.0(感谢 pault)你可以跳过 rdd 创建

l = [('Tony','Chapman',28)] 
df = sqlContext.createDataFrame(l, ["First_Name", "Last_Name", "Age"]