关于pyspark:如何在Spark中访问此类数据

 2021-04-27 

How to access this kind of data in Spark

数据以以下形式存储:

1
2
3
4
5
6
7
    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。它包含以下几行:

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

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

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

data/mllib/sample_libsvm_data.txt只是一个文件。就我而言,有很多文件。 Spark中是否有任何RDD可以方便地处理这种情况?是否需要将所有100文件合并为一个大文件并作为示例进行处理?我想使用Spark引擎缩放数据集(均值标准归一化或最小-最大归一化)。


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

dir = " data / *。txt "

sc.textFile(dir)

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


简单点

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

Spark自动拾取该目录内的所有文件