2017-02-14 82 views
0

我正在研究Spark的文件分析器,它基本上可以一次讀取行,並將所有這些行作爲單行放在數據框中。
我知道我需要使用InputFormat來嘗試和指定,但我無法在Python中找到一個很好的指導。
有沒有一種在Python中指定自定義InputFormat的方法,還是我需要將它創建爲一個scala文件,然後在​​中指定jar?在Pyspark中使用Hadoop InputFormat

回答

0

您可以直接在Pyspark上使用InputFormats。

documentation報價,

PySpark也可以讀取任何Hadoop的InputFormat或寫任何的Hadoop OUTPUTFORMAT,對於「新」與「舊」的Hadoop MapReduce的的API。

傳遞HadoopInputFormat類的任何的pyspark.SparkContext作爲適合這些方法中,

要閱讀n行,可以使用org.apache.hadoop.mapreduce.lib.NLineInputFormat作爲具有newAPI方法的HadoopInputFormat類。

+0

'hadoopFile'方法是應該用來讀取文件的內容,RDD方法不提供輸入URI參數。 –

+0

我其實不知道如何使用RDD方法...我正在閱讀源代碼,並且這兩種方法都返回RDD的... –

+1

是的,這些RDD方法假定文件已被sc讀取,使用接受URI的'addFile()'方法。我在上下文中添加了這些方法。 – franklinsijo

0

我不能找到一個很好的指南,這在Python

在Spark文檔,在「保存和加載其他Hadoop的輸入/輸出格式」中,有一個Elasticsearch例如+鏈接到HBase的例。

可以在時間n行基本上都看過......我知道我需要使用InputFormat嘗試和指定

有專門爲NLineInputFormat


這是一些Scala代碼一個粗略的翻譯我從NLineInputFormat not working in Spark

def nline(n, path): 
    sc = SparkContext.getOrCreate 
    conf = { 
    "mapreduce.input.lineinputformat.linespermap": n 
    } 

    hadoopIO = "org.apache.hadoop.io" 
    return sc.newAPIHadoopFile(path, 
    "org.apache.hadoop.mapreduce.lib.NLineInputFormat", 
    hadoopIO + ".LongWritable", 
    hadoopIO + ".Text", 
    conf=conf).map(lambda x : x[1]) # To strip out the file-offset 

n = 3 
rdd = nline(n, "/file/input") 

,並把所有的線條爲單排的一個數據幀

隨着NLineInputFormat ,RDD中的每個字符串實際上都是新行分隔的。例如,你可以用rdd.map(lambda record : "\t".join(record.split('\n')))來製作一行。