pyspark:DataFrame.withColumn()有时需要分配给具有不同名称

时间:2017-10-19 14:13:02

标签: apache-spark pyspark apache-spark-sql spark-dataframe pyspark-sql

这似乎特别发生在我将数字列乘以标量,将DataFrame写回HDFS,然后在我再次将其加载到DataFrame时尝试查看该值。例如,在pyspark shell中不会发生。

df = df.withColumn('AMOUNT', df.AMOUNT*lit(-1)) =>不翻转列

df_new = df.withColumn('AMOUNT', df.AMOUNT*lit(-1)) =>作品!

当我使用其他方法或UDF时,它似乎没有表现出同样的怪异。我可以将DataFrame重新分配给自己。即使我创建了一个具有不同名称的全新列,当我尝试从HDFS读取它时,它也不会显示在输出中。

这是火花提交工作的一部分,在纱线集群模式。 PySpark 2.2.0。

文档中是否存在我无法挖掘的内容或者我的实例可能具体的内容?

1 个答案:

答案 0 :(得分:0)

无法重现您的问题(Spark 2.2.0):

spark.version
# u'2.2.0'

import numpy as np
from pyspark.ml.linalg import Vectors
from pyspark.sql.functions import lit

# some data
dd = sc.parallelize([(2.0, np.array([ 2.09078012])), (2.0, np.array([ 2.09078012])), (2.0, np.array([ 2.09078012])), (1.0, np.array([ 2.09078012])), (2.0, np.array([ 2.09078012])), (1.0, np.array([ 2.09078012]))])
dd.take(1)
# [(2.0, array([ 2.09078012]))]

df = dd.map(lambda x: (x[0], Vectors.dense(x[1]))).toDF()
df.show()    
# +---+------------+ 
# | _1|          _2|
# +---+------------+
# |2.0|[2.09078012]| 
# |2.0|[2.09078012]|
# |2.0|[2.09078012]|
# |1.0|[2.09078012]|
# |2.0|[2.09078012]|
# |1.0|[2.09078012]|
# +---+------------+

df = df.withColumn('_1', df._1*lit(-1))
df.show()
# +----+------------+ 
# |  _1|          _2|
# +----+------------+
# |-2.0|[2.09078012]| 
# |-2.0|[2.09078012]|
# |-2.0|[2.09078012]|
# |-1.0|[2.09078012]|
# |-2.0|[2.09078012]|
# |-1.0|[2.09078012]|
# +---+-------------+

添加显式列名并使用不同的Scala底层版本(2.11和2.10)对其进行测试不会改变行为。