データフレームをRDDに変換してから、以下の操作を実行してタプルを返します。
df.rdd.map { t=>
(t._2 + "_" + t._3 , t)
}.take(5)
次に、以下のエラーが発生しました。誰かアイデアはありますか?ありがとう!
<console>:37: error: value _2 is not a member of org.Apache.spark.sql.Row
(t._2 + "_" + t._3 , t)
^
DataFrameをRDDに変換すると、RDD[Row]
なので、map
を使用すると、関数はRow
をパラメーターとして受け取ります。したがって、Row
メソッドを使用してそのメンバーにアクセスする必要があります(インデックスは0から始まることに注意してください)。
df.rdd.map {
row: Row => (row.getString(1) + "_" + row.getString(2), row)
}.take(5)
Spark scaladoc で、より多くの例を表示し、Row
オブジェクトで使用可能なすべてのメソッドを確認できます。
編集:この操作を行う理由はわかりませんが、DataFrameの文字列列を連結するには、次のオプションを検討できます。
import org.Apache.spark.sql.functions._
val newDF = df.withColumn("concat", concat(df("col2"), lit("_"), df("col3")))
List
またはArray
であるかのように Row のすべての要素にアクセスできます。つまり、(index)
を使用することを意味しますが、メソッドget
も使用できます。
例えば:
df.rdd.map {t =>
(t(2).toString + "_" + t(3).toString, t)
}.take(5)