2017-04-02 42 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

相关问题