を生成するために、MAX()関数を使用することができません:withColumnは、私はこのようなデータセット持っている私は、新しい列
a = sc.parallelize([[1,2,3],[0,2,1],[9,8,7]]).toDF(["one", "two", "three"])
を私は最大値に等しい新しい列を追加し、データセットを持つようにしたいです他の3つの列に表示されます。 出力は次のようになります。
+----+----+-----+-------+
|one |two |three|max_col|
+----+----+-----+-------+
| 1| 2| 3| 3|
| 0| 2| 1| 2|
| 9| 8| 7| 9|
+----+----+-----+-------+
私はそうのように、withColumn
を使用するだろうと思った:
b = a.withColumn("max_col", max(a["one"], a["two"], a["three"]))
が、これは誤り
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/spark152/python/pyspark/sql/column.py", line 418, in __nonzero__
raise ValueError("Cannot convert column into bool: please use '&' for 'and', '|' for 'or', "
ValueError: Cannot convert column into bool: please use '&' for 'and', '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.
奇数が得られます。 max
はbool
を返しますか? the documentation on max
によるものではありません。はい。奇妙な。
私はそれは奇妙な、これが機能することを見つける:
b = a.withColumn("max_col", a["one"] + a["two"] + a["three"]))
そして、それが動作するという事実は私がmax
は、私は理解していないいくつかの方法を動作していることがさらに強く考えさせます。
また、私はb = a.withColumn("max_col", max([a["one"], a["two"], a["three"]]))
を試しましたが、これは3つの列で3つの列ではなく3つの列になります。これにより、上記と同じエラーが発生します。
残念ながら、これは私のためには機能しませんでした。テストするチャンスがなかったので、それは小さな問題/バグです。私はRDDではなくDataFramesを使い続けることを好むので、実用的なソリューションを見つけたらそれを感謝します! –