2017-04-02 108 views
3

我正嘗試加載接近1000條記錄的現場催化劑數據。如下所示的代碼我使用:有沒有辦法將超過255列加載到Spark Dataframe?

from pyspark.sql.types import * 
    from pyspark.sql import Row 
    sqlContext = SQLContext(sc) 
    omni_rdd = sc.textFile('hdfs://user/temp/sitecatalyst20170101.gz') 
    omni_rdd_delim = omni_rdd.map(lambda line: line.split("\t")) 
    omni_df = omni_rdd_delim.map(lambda line: Row(
     col_1 = line[0] 
    , col_2 = line[1] 
    , col_3 = line[2] 
    , .. 
    , .. 
    , col_999 = line[998] 
    )).toDF() 

我來跨越以下錯誤:

File "<stdin>", line 2 
    SyntaxError: more than 255 arguments 

有沒有什麼方法可以讓我所有的1000列加載到數據幀我?

-V

回答

3

你可以這樣做。 定義與列名的列表

cols = ['col_0' ,'col_1' ,'col_2' ,.........., 'col_999'] 

,同時創造你的數據幀

omni_rdd = sc.textFile('hdfs://user/temp/sitecatalyst20170101.gz') 
omni_rdd_delim = omni_rdd.map(lambda line: line.split(",")) 
omni_df = omni_rdd_delim.toDF(cols) 
+0

它一個很好的答案使用它。 –

+0

這會導致以下錯誤:** Traceback(最近呼叫的最後一個): 文件「」,第1行,在 文件「/opt/spark/python/pyspark/sql/context.py」,第64行,在toDF return sqlContext.createDataFrame(self,schema,sampleRatio) 文件「/opt/spark/python/pyspark/sql/context.py」,第423行,在createDataFrame中 rdd,schema = self._createFromRDD(data,模式,samplingRatio) 文件 「/opt/spark/python/pyspark/sql/context.py」,線315,在_createFromRDD struct.fields [I]。名稱=名 IndexError:列表索引超出範圍** 任何想法如何我們可以糾正這? – user2738809

相關問題