次のDataSet
値をinputData
とすると、
column0 column1 column2 column3
A 88 text 99
Z 12 test 200
T 120 foo 12
Sparkでは、新しいhash
列を計算し、それを新しいDataSet
、hashedData
に追加する効率的な方法は何ですか。ここで、hash
は次のように定義されていますinputData
の各行の値に対するMurmurHash3
の適用。
具体的には、hashedData
は次のようになります。
column0 column1 column2 column3 hash
A 88 text 99 MurmurHash3.arrayHash(Array("A", 88, "text", 99))
Z 12 test 200 MurmurHash3.arrayHash(Array("Z", 12, "test", 200))
T 120 foo 12 MurmurHash3.arrayHash(Array("T", 120, "foo", 12))
詳細が必要な場合はお知らせください。
どんな助けでもありがたいです。ありがとう!
1つの方法は、withColumn
関数を使用することです。
import org.Apache.spark.sql.functions.hash
dataset.withColumn("hash", hash(dataset.columns.map(col):_*))
Sparkは、これをパッケージorg.Apache.spark.sql.functions
内のhash
関数として実装済みです。
/**
* Calculates the hash code of given columns, and returns the result as an int column.
*
* @group misc_funcs
* @since 2.0
*/
@scala.annotation.varargs
def hash(cols: Column*): Column = withExpr {
new Murmur3Hash(cols.map(_.expr))
}
そして私の場合、次のように適用されます:
import org.Apache.spark.sql.functions.{col, hash}
val newDs = typedRows.withColumn("hash", hash(typedRows.columns.map(col): _*))
Spark sql :(。
他の誰かがそれを必要とする場合に備えて、これをここに残します。ありがとう!