サンバ:
私は、ヘッダーと、新しい行から始まる以下の各レコードが存在するようにフォーマットされた文字列にメトリックデータを解析しようとしています。当初、私はこのように書式設定テーブルに何かの近くを取得したいです:
Id | Name | Rate | Value
1L | Name1 | 1 | value_1
2L | Name2 | 2 | value_2
3L | Name3 | 3 | value_3
しかし、私の現在の実装では、次のエラーになり:
java.util.MissingFormatArgumentException:フォーマット指定子 '%-70s'
私はそれが正しくフォーマット取得するために私のコードで何を変更する必要がありますか?
import spark.implicits._
import org.apache.spark.sql.types._
import org.apache.spark.sql.functions._
case class BaseMetric(val id: Long,
val name: String,
val rate: String,
val value: String,
val count: Long,
val isValid: Boolean
) {
def makeCustomMetric: String = Seq(id, name, rate, value).mkString("\t")
}
val metric1 = new BaseMetric(1L, "Name1", "1", "value_1", 10L, true)
val metric2 = new BaseMetric(2L, "Name2", "2", "value_2", 20L, false)
val metric3 = new BaseMetric(3L, "Name3", "3", "value_3", 30L, true)
val metrics = Seq(metric1, metric1, metric1)
def formatMetrics(metrics: Seq[BaseMetric]): String = {
val pattern = "%-50s | %-70s | %-55s | %-65s | %f"
val formattedMetrics: String = pattern.format(metrics.map(_.makeCustomMetric))
.mkString("Id | Name | Rate | Value\n", "\n", "\nId | Name | Rate | Value")
formattedMetrics
}
val metricsString = formatMetrics(metrics)
サスキア:
特定のエラーは、あなたがどれ*を期待する形式に配列[文字列]を渡すという事実によるものです。あなただけの代わりに5の1つのパラメータを渡します。エラーは、それはあなたの第二のフォーマット文字列の引数を見つけることができませんと言います。
あなたはすべてのメトリックのパターンではなく、パターン上のすべてのメトリックを適用したいです。フォーマット文字列でパディングは、あなたが達成したい何のために大きすぎます。
val pattern = "%-2s | %-5s | %-4s | %-6s"
metrics.map(m => pattern.format(m.makeCustomMetric: _*))
.mkString("Id | Name | Rate | Value\n", "\n", "\nId | Name | Rate | Value")
_*
あなたは可変長引数としてリストを渡したいというコンパイラに指示します。makeCustomMetric
文字列の代わりに、そして唯一のリストを返す必要があります。
def makeCustomMetric: String = Seq(id, name, rate, value)