xai-org/x-algorithm · error · IllegalArgumentException

Must read at least some data!

Error message

Must read at least some data!

What it means

EvaluationReferenceDataExtraction requires at least one of the --rectweet or --recap boolean flags to be true; both default to false, and reading nothing would produce an empty dataset, so the job throws immediately at argument validation.

Source

Thrown at simclusters/simclusters_v2/scalding/evaluation/EvaluationReferenceDataExtraction.scala:93

  }
}

object AdhocTimelinesDataExtraction extends TwitterExecutionApp {

  @Override
  def job: Execution[Unit] = {
    Execution.withArgs { args =>
      implicit val dateRange: DateRange =
        DateRange.parse(args.list("date"))(DateOps.UTC, DateParser.default)

      val outputDir = args("output_dir")
      val readRecTweet = args.boolean("rectweet")
      val readRecap = args.boolean("recap")
      val sampleRate = args.double("sample_rate")
      val useTsv = args.boolean("output_tsv")

      if (!readRecTweet && !readRecap) {
        throw new IllegalArgumentException("Must read at least some data!")
      }
      val recTweets = if (readRecTweet) {
        println("RecTweets are included in the dataset")
        TimelinesEngagementDataExtractor.readTimelinesRecTweets(
          recTweets =
            DailySuffixFeatureSource(TimelinesEngagementDataExtractor.RecTweetHdfsPath).read,
          sampleRate = sampleRate)(dateRange)
      } else {
        TypedPipe.empty
      }

      val recaps = if (readRecap) {
        println("Recaps are included in the dataset")
        TimelinesEngagementDataExtractor.readTimelinesRecapTweets(
          recapTweets =
            DailySuffixFeatureSource(TimelinesEngagementDataExtractor.RecapTweetHdfsPath).read,
          sampleRate = sampleRate
        )(dateRange)

View on GitHub (pinned to 24c60942c5)

Solutions

  1. Add --rectweet true (or --recap true, or both) to the job arguments
  2. If you need only one dataset, set exactly one flag and the corresponding reader will run
  3. Add a usage/help check in the job wrapper that prints required flags before submission

Example fix

// before
val readRecTweet = args.boolean("rectweet")
val readRecap = args.boolean("recap")
if (!readRecTweet && !readRecap) {
  throw new IllegalArgumentException("Must read at least some data!")
}

// after (default rectweet to true when neither is specified)
val readRecTweet = args.boolean("rectweet", default = true)
val readRecap = args.boolean("recap")
if (!readRecTweet && !readRecap) {
  throw new IllegalArgumentException("Must read at least some data!")
}
Defensive patterns

Strategy: validation

Validate before calling

require(args.boolean("rectweet") || args.boolean("recap"),
  "At least one of --rectweet or --recap must be true")

Prevention

When it happens

Trigger: Running the job with neither --rectweet true nor --recap true set (they are not defaulting to true via args.boolean).

Common situations: Ad-hoc runs copying a minimal arg set; a scheduler template that omits both flags; renaming of the flags between versions.

Related errors


AI-assisted analysis of xai-org/x-algorithm@24c60942c5 (2026-08-28). Data as JSON: /api/errors/bf397c3ba40f5a51. Report an issue: GitHub.