:spark Dataframeの列間で複雑な計算を行うには?たとえば
val calresult1 = indexedresult.withColumn("_4", lit(1))
calresult1.show()
+---+---+------------------+---+
| _1| _2| _3| _4|
+---+---+------------------+---+
| 5| 2| 5.0| 1|
| 5| 0|0.5555555555555554| 1|
| 4| 0| 3.222222222222222| 1|
| 3| 5| 1.0| 1|
......
は、私が使用していくつかの簡単な計算を行うことができます+、 - 、*、/:
val calresult2 = calresult1.withColumn("_5", calresult1.col("_4")/(calresult1.col("_3"))).select("_1","_2","_5")
calresult2.show()
+---+---+------------------+
| _1| _2| _5|
+---+---+------------------+
| 5| 2| 0.2|
| 5| 0|1.8000000000000007|
| 4| 0| 1.0|
......
が、POWとSQRTを使用することはできません。
val calresult2 = calresult1.withColumn("_5", pow(calresult1.col("_4")+(calresult1.col("_3")))).select("_1","_2","_5")
calresult2.show()
エラー:
Error:(414, 53) could not find implicit value for parameter impl: breeze.numerics.pow.Impl[org.apache.spark.sql.Column,VR]
val calresult2 = calresult1.withColumn("_5", pow(calresult1.col("_4")+(calresult1.col("_3")))).select("_1","_2","_5")
^
複合体を実装する方法は?
import org.apache.spark.sql.functions.{pow, sqrt}
、あなたが良いでしょう:
精度を制御する方法は?例:2.4197530864197523から2.41975への変換。 –
精度を第2引数として 'round()'だけを使用してください。前の例を使用して、 'round(pow(calresult1.col(" _ 4 ")+(calresult1.col(" _ 3 "))、2.0)、5)'は望ましい精度を与えます。 –