คุณไม่สามารถเพิ่มคอลัมน์โดยพลการDataFrame
ใน Spark คอลัมน์ใหม่สามารถสร้างได้โดยใช้ตัวอักษรเท่านั้น (ประเภทตัวอักษรอื่น ๆ อธิบายไว้ในวิธีการเพิ่มคอลัมน์ค่าคงที่ใน Spark DataFrame? )
from pyspark.sql.functions import lit
df = sqlContext.createDataFrame(
[(1, "a", 23.0), (3, "B", -23.0)], ("x1", "x2", "x3"))
df_with_x4 = df.withColumn("x4", lit(0))
df_with_x4.show()
## +---+---+-----+---+
## | x1| x2| x3| x4|
## +---+---+-----+---+
## | 1| a| 23.0| 0|
## | 3| B|-23.0| 0|
## +---+---+-----+---+
การเปลี่ยนคอลัมน์ที่มีอยู่:
from pyspark.sql.functions import exp
df_with_x5 = df_with_x4.withColumn("x5", exp("x3"))
df_with_x5.show()
## +---+---+-----+---+--------------------+
## | x1| x2| x3| x4| x5|
## +---+---+-----+---+--------------------+
## | 1| a| 23.0| 0| 9.744803446248903E9|
## | 3| B|-23.0| 0|1.026187963170189...|
## +---+---+-----+---+--------------------+
รวมโดยใช้join
:
from pyspark.sql.functions import exp
lookup = sqlContext.createDataFrame([(1, "foo"), (2, "bar")], ("k", "v"))
df_with_x6 = (df_with_x5
.join(lookup, col("x1") == col("k"), "leftouter")
.drop("k")
.withColumnRenamed("v", "x6"))
## +---+---+-----+---+--------------------+----+
## | x1| x2| x3| x4| x5| x6|
## +---+---+-----+---+--------------------+----+
## | 1| a| 23.0| 0| 9.744803446248903E9| foo|
## | 3| B|-23.0| 0|1.026187963170189...|null|
## +---+---+-----+---+--------------------+----+
หรือสร้างขึ้นด้วยฟังก์ชัน / udf:
from pyspark.sql.functions import rand
df_with_x7 = df_with_x6.withColumn("x7", rand())
df_with_x7.show()
## +---+---+-----+---+--------------------+----+-------------------+
## | x1| x2| x3| x4| x5| x6| x7|
## +---+---+-----+---+--------------------+----+-------------------+
## | 1| a| 23.0| 0| 9.744803446248903E9| foo|0.41930610446846617|
## | 3| B|-23.0| 0|1.026187963170189...|null|0.37801881545497873|
## +---+---+-----+---+--------------------+----+-------------------+
ฟังก์ชันในตัวที่ชาญฉลาดด้านประสิทธิภาพ ( pyspark.sql.functions
) ซึ่งแมปกับนิพจน์ของตัวเร่งปฏิกิริยามักเป็นที่ต้องการมากกว่าฟังก์ชันที่กำหนดโดยผู้ใช้ Python
หากคุณต้องการเพิ่มเนื้อหาของ RDD โดยพลการเป็นคอลัมน์คุณสามารถทำได้