私は Apache NiFi を使用してデータフローを構築していますが、現在扱っている実際のデータは区切り値で構成されています。私は ExecuteScript を使用したいと考えています。そのために、次のことを行う単純な Groovy スクリプトを作成しました。
1) 現在の区切り文字をパイプ (|) に置き換えます
2) \r\n と \tab を " " に置き換えます。
このスクリプトの理由は、次の問題を示すデータセットでデータのクリーニングとラングリングを行うことです。
\tab
a) テキスト (多くの場合長い) は、またはを介して行をまたいでい\r\n
ます。これは完全な停止の前に発生する可能性がありますが、一貫していません。
b) 空白行 (現在、スクリプトはまだこれに触れていません)
1) は簡単に実行できましたが、2) のコードでは表とキャリッジ リターンが削除されていないようで、その理由がわかりません。コードは次のとおりです。
import org.apache.nifi.processor.io.StreamCallback
import java.nio.charset.StandardCharsets
def flowFile = session.get()
if(!flowFile) return
flowFile = session.write(flowFile, {inputStream, outputStream ->
inputStream.eachLine { line ->
def a = line.replaceAll('\t', ' ').replaceAll('\r\n', ' ').replaceAll('¦', '|')
outputStream.write("${a}\n".toString().getBytes(StandardCharsets.UTF_8))
}
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS)
ご協力ありがとうございました。