2017-05-24 16 views
0

このエラーが発生していますが、エラーで複数のstackoverflow投稿が見つかりました。これらのposts.Butで説明されている説明と関連付けることができます。 私は受信エラーが、私はと私のHDFS環境での/データ/ amitesh下の3つのTXTファイルを持っているライン12 を指しているIndexError:リストのインデックスが範囲外です。シナリオが異なる

1 from pyspark import SparkContext 
    2 sc = SparkContext("local", "Simple App") 
    3 from pyspark.sql import SQLContext, Row 
    4 sqlContext = SQLContext(sc) 
    5 
    6 ssn = sc.textFile("/Data/amitesh") 
    7 
    8 parts_ssn = ssn.map(lambda l: l.split(',')) 
    9 #wow = ssn.map(lambda()) 
10 
11 stg_ssn = parts_ssn.map(lambda p: Row(name=p[0])) 
12 stg = sqlContext.createDataFrame(parts_ssn, ['name','age','city']) 
13 stg.take(5) 

::スパーク1.6.1環境でPythonのコードの下に実行していますそれぞれ3列。 3つのファイルはすべて同じスキーマ(名前、年齢、都市)を持ちますが、ファイルに見出しはありません。ただし、行数は異なる場合があります。以下は

がフルスタックが

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/usr/iop/4.2.0.0/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/usr/iop/4.2.0.0/spark/lib/spark-assembly-1.6.1_IBM_4-hadoop2.7.2-IBM-12.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
Traceback (most recent call last): 
    File "location_to/master.py", line 16, in <module> 
    stg = sqlContext.createDataFrame(parts_ssn, ['name','age','city']) 
    File "location_to/context.py", line 423, in createDataFrame 
    File "location_to/context.py", line 315, in _createFromRDD 
IndexError: list index out of range 

をダンプである私は、コード

--masterローカルmaster.py

に任意の提案を火花提出実行するためにしてください火花提出使用しています。.. .. !!それが問題を解決したので、答えとして

+0

期待される出力は? –

+0

私の予想される出力は、5行の列の内容を表示することです。 – user3521180

+0

'context.py'の行315はどのように見えますか? – Kevin

答えて

1

投稿コメント:

データフレームに変換するRDDを調製する場合、作成された行のエントリは単一列のみ(name)が含まれていますが、データフレームを作成する際に、提供スキーマには3つの列(name, age, city)が含まれています。

DataFrameの作成時にRowオブジェクトの列が指定されたスキーマと一致する必要があります。だから、次のようになります。

stg_ssn = parts_ssn.map(lambda p: Row(name=p[0], age=p[1], city=p[2])) 
stg = sqlContext.createDataFrame(parts_ssn, ['name','age','city']) 

これは想定して、そのpはもちろんの3つのエントリが含まれています。

関連する問題