我为某些需求创建了一个空的数据框,当我在其上调用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|
+----------+---------+---+
+----------+---------+---+
这是什么原因?该如何解决?
答案 0 :(得分:3)
这是预期的结果-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"]