选项';基本路径';必须是Scala目录

选项';基本路径';必须是Scala目录,scala,apache-spark,apache-kafka,Scala,Apache Spark,Apache Kafka,我有这段代码,它给出的错误是basepath必须是dir。只想运行一个简单的卡夫卡辛流媒体 val checkPointDir = "/tmp/offsets/" // "hdfs://hdfscluster/user/yarn/tmp/" def main(args: Array[String]): Unit ={ lazy val spark = SparkSession .builder .appNa

我有这段代码,它给出的错误是basepath必须是dir。只想运行一个简单的卡夫卡辛流媒体

val checkPointDir = "/tmp/offsets/" // "hdfs://hdfscluster/user/yarn/tmp/"

    def main(args: Array[String]): Unit ={
            lazy val spark = SparkSession
              .builder
              .appName("KafkaProducer")
              .master("local[*]")
              .getOrCreate()



           val query = writeStream(jsonDF, "test")
            query.awaitTermination()
          }


      def writeStream(df:DataFrame, topic:String): StreamingQuery = {
    //    log.warn("Writing to kafka")
        df
          //      .selectExpr( "CAST(value AS STRING)")
          .writeStream
          .format("kafka")
          .option("kafka.bootstrap.servers", kafkaServers)
          .option("topic", topic)
          .option("checkpointLocation", checkPointDir)
          .outputMode(OutputMode.Update)
          .start()
      }
我的用户是此文件夹/tmp/offset的所有者。我得到了这个例外

java.lang.IllegalArgumentException:选项“basePath”必须是目录

“checkpointLocation”
应提供目录的规范路径


此目录用于存储实际的中间RDD。如果存在多个检查点,则可以存储多个RDD。每个RDD的数据都存储在单独的目录中。但是,RDD本身是分区的,每个分区都存储在RDD目录中的一个单独文件中。在HDFS中存储文件时,Spark必须遵守“最大块大小”属性。在单个文件中存储此类结构化数据是不可能的,因此目录是不可能的。

Nope的可能副本!我已经试过了。它与此不同。您可以尝试像下面这样提供文件的规范路径
新文件(path)。getCanonicalFile
哪个文件?我制作数据帧的那个?Im使用一个本地文件,并使用spark.readStream.text(PATH_TO_file)读取该文件,getCanonicalPath也返回相同的路径。/home/user/Documents/fn/Proto2/src/main/resource/events-identification-carrier-a.txt类似于此