-1

這似乎特別發生在我將數字列乘以標量時,將DataFrame寫回HDFS,然後嘗試查看當我再次將它加載到DataFrame中時的值。例如,在pyspark shell中不會發生。pyspark:DataFrame.withColumn()有時需要以不同的名稱分配給新的DataFrame

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

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

當我使用其他方法或UDF時,它似乎沒有表現出相同的古怪。我可以將DataFrame重新分配給自己。即使我使用不同的名稱創建了一個全新的列,但當我嘗試從HDFS中讀取它時,它並不會顯示在輸出中。

這是在紗線叢集模式下spark-submit作業的一部分。 PySpark 2.2.0。

有沒有埋沒在文檔中,我無法挖掘或可能是什麼特定於我的實例?

回答

0

無法重現您的問題(火花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),測試它不會改變的行爲。

+0

是在殼內?那裏很好。我通過在簇羣模式下通過spark-submit來看到它,將df寫入HDFS(parquet),然後單獨將它從HDFS加載回來。 – jastang

+0

@jastang它是在一個Databricks筆記本;如果是這樣,你應該在帖子中相應地強調它,另外提供一個最小*可重現的例子 - 否則不能看出任何人可以如何幫助 – desertnaut

相關問題