Spark作业处理

vltsax25  于 2023-02-24  发布在  Apache
关注(0)|答案(2)|浏览(119)

我是Hadoop和Spark的新手。我正在尝试在我的本地系统上使用4核和32 GB-Ram处理近100 GB的数据。我的代码花费了一个半小时来计算数据。我做错了什么吗?请帮助我的代码如下

public class ReadCSV {
public static void main(String[] args) {
    long startTime = System.currentTimeMillis();
    SparkSession sparkSession = SparkSession.builder().appName("CsvReader")
            .master("local[4]")
            .config("spark.sql.debug.maxToStringFields", 100)
            .getOrCreate();
    SparkContext sparkContext = sparkSession.sparkContext();
    sparkContext.setLogLevel("ERROR");
    
    try {                       
        String filePath = "/mnt/vol2/OpenLR/openlr/processedData/Monday/*/*/*.csv";         
            Dataset<Row> dataset = sparkSession.read().option("header", "true").option("inferSchema", "true").csv(filePath);
            System.out.println("Total: " + dataset.count());            
            System.out.println("Time taken to complete: " + (System.currentTimeMillis() - startTime));          
    } catch(Exception e) {
        e.printStackTrace();
    }
    sparkContext.stop();
    sparkSession.close();
}

}

xqk2d5yq

xqk2d5yq1#

如果您确信文件的数据质量,则可以尝试删除推断架构。
请检查:Performance Overhead..

lg40wkob

lg40wkob2#

代码看起来很简单,但是由于数据是在一个装载的磁盘上,所以我怀疑大部分时间都浪费在了网络上读取100 GB的数据上。
如果数据在同一台处理机器上,那么阅读速度和磁盘可以处理的争用量(因为spark将并行读取多个文件)仍然会影响最终的吞吐量/时间
根据Spark调谐指南
数据局部性对Spark作业的性能有很大的影响,如果数据和操作它的代码在一起,那么计算速度会很快。

相关问题