这似乎特别发生在我将数字列乘以标量,将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。
文档中是否存在我无法挖掘的内容或者我的实例可能具体的内容?
答案 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)对其进行测试不会改变行为。