如何在Spark中访问此类数据

时间:2016-05-18 18:42:30

标签: apache-spark pyspark

数据以下列形式存储:

    data/file1_features.mat
    data/file1_labels.txt
    data/file2_features.mat
    data/file2_labels.txt
    ...
    data/file100_features.mat
    data/file100_labels.txt

每个data/file*_features.mat存储一些样本的特征,每行都是一个样本。每个data/file*_labels.txt存储这些样本的标签,每行是一个数字(例如,1,2,3,...)。在整个100个文件中,总共约有80百万个样本。

Spark中,如何访问此数据集?

我查看了spark-2.0.0-preview/examples/src/main/python/mllib/random_forest_classification_example.py。它有以下几行:

    data = MLUtils.loadLibSVMFile(sc, 'data/mllib/sample_libsvm_data.txt')
    (trainingData, testData) = data.randomSplit([0.7, 0.3])

我在./bin/pyspark中运行此示例,它显示data对象是PythonRDD

    PythonRDD[32] at RDD at PythonRDD.scala:48

data/mllib/sample_libsvm_data.txt只是一个文件。就我而言,有很多文件。 RDD中是否有Spark可以方便地处理此案例?是否需要将所有100文件合并到一个大文件中并将其作为示例进行处理?我想使用Spark引擎来扩展数据集(mean-std normalization或min-max normalization)。

2 个答案:

答案 0 :(得分:1)

简单点

   dir = "<path_to_data>/data"
   sc.textFile(dir)

Spark会自动获取该目录中的所有文件

答案 1 :(得分:1)

如果您需要特定于加载的文件类型进行处理,则可以使用正则表达式将文件加载到RDD中。

dir =&#34; data / * .txt&#34;

sc.textFile(DIR)

Spark会将所有文件以txt扩展名结尾。