2016-03-22 3 views
0

, потому что я не могу использовать искровой CSV я вручную создал dataframe из CSV следующим образом:подачи dataframe, созданный из CSV в MLlib Kmeans: IndexError: индекс списка из диапазона

raw_data=sc.textFile("data/ALS.csv").cache() 
csv_data=raw_data.map(lambda l:l.split(",")) 
header=csv_data.first() 
csv_data=csv_data.filter(lambda line:line !=header) 

row_data=csv_data.map(lambda p :Row (
location_history_id=p[0], 
user_id=p[1], 
latitude=p[2], 
longitude=p[3], 
address=p[4], 
created_at=p[5], 
valid_until=p[6], 
timezone_offset_secs=p[7], 
opening_times_id=p[8], 
timezone_id=p[9])) 

location_df = sqlContext.createDataFrame(row_data) 
location_df.registerTempTable("locations") 

мне нужно только два колонки:

lati_longi_df=sqlContext.sql("""SELECT latitude, longitude FROM locations""") 

rdd_lati_longi = lati_longi_df.map(lambda data: Vectors.dense([float(c) for c in data])) 
rdd_lati_longi.take(2): 

[DenseVector ([- 6,2416, 106,7949]), DenseVector ([- 6,2443, 106,7956])]

теперь, кажется, что каждая вещь готова для KMeans Обучение:

clusters = KMeans.train(rdd_lati_longi, 10, maxIterations=30, 
    runs=10, initializationMode="random") 

, но я получаю следующее сообщение об ошибке:

IndexError: list index out of range 

Первые три строки ALS.csv: location_history_id, user_id, широта, долгота, адрес, created_at, valid_until, timezone_offset_secs, opening_times_id, timezone_id

+0

@AlbertoBonsanto – sanaz

+0

@eliasah я ценю вашу помощь – sanaz

+0

@ zero323 я был бы признателен вашей помощи – sanaz

ответ

0

Почему бы вам не позволить искрам вместо синтаксиса вместо csv? Вы можете включить поддержку Csv с чем-то вроде этого:

pyspark --packages com.databricks:spark-csv_2.10:1.4.0