将数据集转换为列表行需要花费很多时间

时间:2018-01-08 10:20:21

标签: apache-spark apache-spark-sql apache-spark-mllib

我正在计算TFIDF,因为我需要将我的数据集转换为列表行。

我的数据集有40,00,000条记录,当我为我的数据集调用collectAsList函数时,它需要20多分钟才能完成。 我的RAM配置为16GB。

基本上我需要处理单个行来计算该特定记录的TFIDF。

请建议我在spark中将数据集转换为列表行还有其他类型的函数。

即使我也尝试过和foreach循环,但仍然需要时间。

以下是我的示例代码。

JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("SparkJdbcDs").setMaster("local[*]"));
SQLContext sqlContext = new SQLContext(sc);
SparkSession spark = SparkSession.builder().appName("connection example").getOrCreate();
Dataset<Row> tokenlist= sqlContext.read().format("com.databricks.spark.csv").option("header", "true").option("nullValue", "").load("D:\\AI_MATCHING\\exampleTFIDF.csv");
tokenlist= tokenlist.select("features");
tokenlist.show(false);
List<Row> tokenizedWordsList1 = tokenlist.collectAsList();

/*tokenlist.foreach((ForeachFunction<Row>) individaulRow -> {


    newtest.ItemIDSourceIndex=individaulRow.fieldIndex("ItemIDSource");
    newtest.upcSourceIndex=individaulRow.fieldIndex("upcSource");
    newtest.ManufacturerSourceIndex=individaulRow.fieldIndex("ManufacturerSource");
    newtest.ManufacturerPartNumberSourceIndex=individaulRow.fieldIndex("Manufacturer part NumberSource");
    newtest.PART_NUMBER_SOURCEIndex=individaulRow.fieldIndex("PART_NUMBER_SOURCE");
    newtest.productDescriptionSourceIndex=individaulRow.fieldIndex("productDescriptionSource");
    newtest.HASH_CODE_dummyIndex=individaulRow.fieldIndex("HASH_CODE_dummy");
    newtest.rowIdSourceIndex=individaulRow.fieldIndex("rowIdSource");
    newtest.rawFeaturesIndex=individaulRow.fieldIndex("rawfeatures                                                                                                                                                                                                                   ");
    newtest.featuresIndex=individaulRow.fieldIndex("features                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ");

    });*/

1 个答案:

答案 0 :(得分:0)

A)Spark ML库本身已经在进行TFIDF计算,尝试使用这些方法。

B)如果你有大行(toList()需要时间),尝试使用SQL方法。 例如将数据集转换为表并在某些条件下对其进行查询