Java 火花中的文本流

Java 火花中的文本流,java,apache-spark,spark-streaming,Java,Apache Spark,Spark Streaming,我有以下代码: SparkConf sparkConf = new SparkConf().setAppName("My app") .setMaster("local[4]") .set("spark.executor.memory", "2g") .set("spark.driver.allowMultipleContexts", "true"); JavaStreamingContext jssc = new JavaStreamingCo

我有以下代码:

SparkConf sparkConf = new SparkConf().setAppName("My app")
        .setMaster("local[4]")
        .set("spark.executor.memory", "2g")
        .set("spark.driver.allowMultipleContexts", "true");

JavaStreamingContext jssc = new JavaStreamingContext(sparkConf, Durations.seconds(2));

JavaDStream<String> trainingData = jssc.textFileStream("filesDirectory");

trainingData.print();

jssc.start();
jssc.awaitTermination();
SparkConf SparkConf=new SparkConf().setAppName(“我的应用程序”)
.setMaster(“本地[4]”)
.set(“spark.executor.memory”、“2g”)
.set(“spark.driver.allowMultipleContexts”、“true”);
JavaStreamingContext jssc=新的JavaStreamingContext(sparkConf,Durations.seconds(2));
JavaDStream trainingData=jssc.textFileStream(“filedirectory”);
trainingData.print();
jssc.start();
jssc.aittimination();
不幸的是,要流式传输目录中存在的任何文件,我必须编辑此文件并在启动流上下文后重命名它,否则它将不会被处理

我应该编辑和重命名每个文件来处理它,还是有另一种方法来处理现有文件,只需编辑和保存它们


另外,当我将新文件移动到此目录时,我还需要编辑并重命名此文件以流式传输

JavaStreamingContext.textFileStream
返回一个
FileInputDStream
,用于在定期添加/更新文件夹中的文件时监视文件夹。仅当添加/更新新文件时,才会在每两秒后收到通知

如果您的意图只是读取文件,则可以使用

查看源代码中的文档


JavaStreamingContext.textFileStream
返回一个
FileInputDStream
,用于在定期添加/更新文件夹中的文件时监视文件夹。仅当添加/更新新文件时,才会在每两秒后收到通知

如果您的意图只是读取文件,则可以使用

查看源代码中的文档


在移动到目标目录之前,请尝试触摸文件。 下面是javadoc所说的

  • 确定给定的
    路径
    是否是批
    currentTime
    的新文件。就这样
  • 如果接受,则必须通过以下标准
    • 它必须通过用户提供的文件筛选器
    • 它必须比忽略阈值新。假定文件的时间早于忽略时间
  • 阈值已被考虑,或者在开始之前是现有文件
  • (当newFileOnly=true时)
    • 它不能出现在此类记住的最近选定的文件中
    • 它不能比该批处理的时间(即
      currentTime
      )新
  • 正在测试文件。如果驱动程序已恢复,并且缺少批处理,则可能会发生这种情况
  • (停机期间)正在生成。在这种情况下,可能会生成一批时间T
  • 在时间T+x。假设x=5。如果批处理T包含mod time T+5的文件,那么坏的事情可能会发生
  • 发生。假设所选文件被记住60秒。在时间t+61时
  • 该批时间t被遗忘,忽略阈值仍为t+1
  • mod time T+5的文件不会被记住,也不能被忽略(因为T+5>T+1)
  • 因此,它们可以再次被选为新文件。为了防止这种情况,修改时间较长的文件
  • 不考虑当前批处理时间以外的时间。 *

在移动到目标目录之前尝试触摸文件。 下面是javadoc所说的

  • 确定给定的
    路径
    是否是批
    currentTime
    的新文件,以便
  • 如果接受,则必须通过以下标准
    • 它必须通过用户提供的文件筛选器
    • 它必须比忽略阈值新。假定文件比忽略阈值旧
  • 阈值已被考虑,或者在开始之前是现有文件
  • (当newFileOnly=true时)
    • 它不能出现在此类记住的最近选定的文件中
    • 它不能比该批处理的时间(即
      currentTime
      )新
  • 正在测试文件。如果驱动程序已恢复,并且缺少批处理,则可能会发生这种情况
  • (停机期间)正在生成。在这种情况下,可能会生成一批时间T
  • 在时间T+x。假设x=5。如果批处理T包含mod time T+5的文件,那么坏的事情可能会发生
  • 发生。假设所选文件被记住60秒。在时间t+61时
  • 该批时间t被遗忘,忽略阈值仍为t+1
  • mod time T+5的文件不会被记住,也不能被忽略(因为T+5>T+1)
  • 因此,它们可以再次被选为新文件。为了防止这种情况,修改时间较长的文件
  • 不考虑当前批处理时间以外的时间。 *
/**
   * Create a input stream that monitors a Hadoop-compatible filesystem
   * for new files and reads them as text files (using key as LongWritable, value
   * as Text and input format as TextInputFormat). Files must be written to the
   * monitored directory by "moving" them from another location within the same
   * file system. File names starting with . are ignored.
   */