-1

日付の四半期の開始日を検索しようとしています。カラムは、私が使用していますTypeError:withColumn()で複数の列を使用している場合、列は反復不可能です

df.withColumn("history_effective_quarter",add_months('history_effective_month',-(month('history_effective_month')%3)+1)) 

TypeError Traceback (most recent call last) 
<ipython-input-259-0bb78d27d2a7> in <module>() 1 

~/anaconda3/lib/python3.6/site-packages/pyspark/sql/column.py in iter(self) 248 249 def iter(self): --> 250 raise TypeError("Column is not iterable") 251 252 # string methods 

TypeError: Column is not iterable 

反復可能ではありません。私はそれがselectExpr()

df.selectExpr("add_months(history_effective_month,-(month(history_effective_month)%3)+1) as history_effective_qtr","history_effective_month").show(5) 

output- 

history_effective_qtr history_effective_month 

     2017-07-01    2017-06-01 
     2016-04-01    2016-05-01 
     2015-10-01    2015-09-01 
     2012-01-01    2012-01-01 
     2012-01-01    2012-01-01 

を使用しますが、私は.withColumn()で同じロジックを追加するとき、私は例外TypeErrorを得る書くとき、私は期待される結果を得ます

df=selectExpr('*',"date_sub(history_effective_date," \ 
    "dayofmonth(history_effective_date)-1) as history_effective_month") 

答えて

2

TL次のようにこの問題を回避するには、DRを単に使用select

select(*cols)

Projects a set of expressions and returns a new DataFrame.

df.select(
    "history_effective_quarter", add_months('history_effective_month', 
    -(month('history_effective_month')%3)+1)) 
withColumnので、あなたのコードは動作しないことができる

withColumn(colName, col)

Returns a new DataFrame by adding a column or replacing the existing column that has the same name.

は、単一の列を追加するために使用される

関連する問題