Spark在这种情况下内部是如何工作的? javarddtextfile=sc.textFile(“C://test.txt”);

Spark在这种情况下内部是如何工作的? javarddtextfile=sc.textFile(“C://test.txt”);,java,multithreading,apache-spark,Java,Multithreading,Apache Spark,假设我有1000行test.txt文件。我有一个带四核处理器的单机器。这是我对spark如何实现并行的理解 Spark将以单线程的方式从文件中读取Chracter块。不确定是否存在默认块大小,或者它取决于文件大小 Spark将根据以下两个参数决定它必须进行多少分区 a) 在步骤1中读取的数据大小,以及 b) 基于cpu中的内核数 根据步骤2中的分区大小,它将生成线程。如果有3个分区,它将产生3个线程 我的理解正确吗?对于本地文件,Spark将分割文件的n块,其中n是默认的并行级别,等于集群中的核

假设我有1000行test.txt文件。我有一个带四核处理器的单机器。这是我对spark如何实现并行的理解

  • Spark将以单线程的方式从文件中读取Chracter块。不确定是否存在默认块大小,或者它取决于文件大小
  • Spark将根据以下两个参数决定它必须进行多少分区 a) 在步骤1中读取的数据大小,以及 b) 基于cpu中的内核数
  • 根据步骤2中的分区大小,它将生成线程。如果有3个分区,它将产生3个线程
    我的理解正确吗?

    对于本地文件,Spark将分割文件的
    n
    块,其中
    n
    是默认的并行级别,等于集群中的核心数(例如,对于
    local[4]
    ,它将是4)

    我们可以提供许多分区来覆盖该行为:

      JavaRDD<String> textFile = sc.textFile("C://test.txt");
    
    我们可以检查分区:

    textFile = sc.textFile("C://test.txt", 8) // will create 8 spark partitions.
    
    请注意,这是底层hadoop文件系统实现的行为。对于分布式文件系统,如hdfs,Spark将使用已使用文件的分区级别。Spark和Hadoop之间的交互在中实现

    据我所知,Spark默认采用的分区数等于文本文件的块数。我们可以通过给出(文件路径,分区数)来手动定义分区。你能详细说明一下文件中的块数是什么意思吗?你是说有1000行,spark会把它分成几个块,比如说4个,然后创建4个分区,如果在同一台机器上,再创建4个线程,否则就把它发送给4个工人。是吗?在Hadoop中,如果文件大小为256mb,默认块大小为64MB(apache发行版,如果Cloudera128MB)。默认情况下,它存储在4个块(4*64 mb)中。默认情况下,Spark将每个块作为每个分区,我们可以管理它们。它对HDFS文件或文件系统也有效吗?在任何文件系统中,但块大小可能不同如果我将n设为4,则意味着Spark将把它划分为250行中的4个块。正确的?您还可以详细说明
    注意,这是底层hadoop文件系统实现的一种行为。对于分布式文件系统,如hdfs,Spark将使用已使用文件的分区级别
    ?基于系统的文件或HDFS是否有自己的分区级别?使用
    sc.textFile(“C://test.txt”,8)
    文件将被分成8个块,如果一台机器中有8个核,每个核可以处理一个块。对吗?@scottmiles如果数据上的操作是可并行的,那么这确实是期望值。
    textFile.partitions()
    //Array[org.apache.spark.Partition] =     Array(
      org.apache.spark.rdd.HadoopPartition@cd0, 
      org.apache.spark.rdd.HadoopPartition@cd1, 
      org.apache.spark.rdd.HadoopPartition@cd2, 
      org.apache.spark.rdd.HadoopPartition@cd3, 
      org.apache.spark.rdd.HadoopPartition@cd4, 
      org.apache.spark.rdd.HadoopPartition@cd5, 
      org.apache.spark.rdd.HadoopPartition@cd6, 
      org.apache.spark.rdd.HadoopPartition@cd7
    )