早上好,
我有以下變數。
self.filters = 'px_variation > 0.15'/span>
df
如果我做df.collect(),我得到。
Row(px_variation=nan, subject_code='1010', list_tr_id=['X0'/span>, 'X1'/span>], list_quantity=[3000. 0, 1.0], list_cash_qty=[16500.0, 5.5] )
我嘗試應用以下函式
df.filter(self.fILLS)
而它的結果是:
Row(px_variation=nan, subject_code='1010', list_tr_id=['X0'/span>, 'X1'/span>], list_quantity=[3000. 0, 1.0], list_cash_qty=[16500.0, 5.5] )
正如你所看到的px_variation在我的DF上是一個numpy.nan,但在應用過濾函式后,它并沒有過濾它。 為什么spark sql沒有忽略nan或者使用它來過濾呢?
如果我在Python中做同樣的操作,結果與預期一致。
df.collect()[0].px_variation > 0.15 -> Result: False
有什么想法嗎?謝謝你。
uj5u.com熱心網友回復:
特殊值NaN被處理為
比其他任何數值都大。
通過Spark的nan-semantics,甚至比infinity"更大"。
一種選擇是將過濾器改成
filters = 'px_variation > 0.15 and not isnan(px_variation)'/span>
另一個處理NaN值的方法是用None/null代替:
df.replace(float('nan'), None) 。 filter('px_variation > 0.15'/span>)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/309460.html
標籤:
上一篇:Linux中的RabbitMQ在某些部署中隨機丟棄連接
下一篇:比較字典的排序
