文字列が含まれているリストが文字列を置き換え[d、e]、a) これらの行を([a、b、c]、[d、e])および([d、e]、[a、b、c])に変換したい私は構造を有するデータフレームを有する
データフレームの列名は "src"と "dst"です。
どうすればこの問題に近づくことができますか?
私が試した:
val result = df.map(f => {
if(df.exists(x => x._1.contains(f._2))) {
(f._1, df.filter(x => x._1.contains(f._2)).head._1)
} else {
(f._1, List(f._2))
}
}).toDF("src", "dst")
はしかし、この解決策は私に次のエラーを与える:
java.lang.IllegalStateException: unread block data at java.io.ObjectInputStream$BlockDataInputStream.setBlockDataMode(ObjectInputStream.java:2740) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1567) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2245) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2169) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2027) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422) at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:75) at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:114) at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:85) at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:53) at org.apache.spark.scheduler.Task.run(Task.scala:108) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:335) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748)
は、より効率的な方法があるに違いありませんか?
お試しいただいたコードを投稿することはできますか? – Sid
投稿者 –
あなたのデータフレームに3つ以上の行がある場合はどうしたらいいですか? –