0

以下のコードは次のようになります。

  • 文字列のシーケンスを反復処理する
  • それぞれをjsonとして解析し、
  • ほとんどの言語で識別子として使用できない名前のフィールドを除外します
  • 残りの名前を小文字にする
  • 結果を文字列としてシリアライズする

小規模なテストでは期待どおりに動作しますが、ライブ データの 860 万アイテム シーケンスでは、出力シーケンスが入力シーケンスよりも大幅に長くなります。

import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.apache.spark._

val txt = sc.textFile("s3n://...")
val patt="""^[a-zA-Z]\w*$""".r.findFirstIn _
val json = (for {
         line <- txt
         JObject(children) <- parse(line)
         children2 = (for {
           JField(name, value) <- children

           // filter fields with invalid names
           // patt(name) returns Option[String]
           _ <- patt(name)

         } yield JField(name.toLowerCase, value))
} yield compact(render(JObject(children2))))

実際にユニークアイテムの数が増えることを確認したので、アイテムを複製するだけではありません。Scala 内包表記と json4s についての私の理解を考えると、これがどのように可能かわかりません。大規模なライブ データ コレクションは Spark RDD ですが、私のテストでは通常の Scala Seq を使用しましたが、違いはありません。

上記のコードjsonよりも多くの要素をどのように持つことができますか?txt

4

2 に答える 2