bugfix> pyspark > 投稿

私はpysparkを初めて使い、PageRankの仕組みを理解しようとしています。 ClouderaのJupyterでSpark 1.6を使用しています。これらのリンクには、頂点とエッジ(およびスキーマ)のスクリーンショットがあります。頂点RDD そしてエッジRDD

私は次のようなコードを持っています:

#import relevant libraries for Graph Frames
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql.functions import desc
from graphframes import *
#Read the csv files 
verticesRDD = sqlContext.read.format("com.databricks.spark.csv").options(header='true', inferschema='true').load("filepath/station.csv")
edgesRDD = sqlContext.read.format("com.databricks.spark.csv").options(header='true', inferschema='true').load("filepath/trip.csv")
#Renaming the id columns to enable GraphFrame 
verticesRDD = verticesRDD.withColumnRenamed("station_ID", "id")
edgesRDD = edgesRDD.withColumnRenamed("Trip ID", "id")
edgesRDD = edgesRDD.withColumnRenamed("Start Station", "src")
edgesRDD = edgesRDD.withColumnRenamed("End Station", "dst")
#Register as temporary tables for running the analysis
verticesRDD.registerTempTable("verticesRDD")
edgesRDD.registerTempTable("edgesRDD")
#Note: whether i register the RDDs as temp tables or not, i get the same results... so im not sure if this step is really needed
#Make the GraphFrame
g = GraphFrame(verticesRDD, edgesRDD)

今、pageRank関数を実行すると:

g.pageRank(resetProbability=0.15, maxIter=10)

Py4JJavaError:o98.runの呼び出し中にエラーが発生しました。 localhost):scala.MatchError:[null、null、[913460,765,8/31/2015 23:26、Harry Bridges Plaza(Ferry Building)、50,8/31/2015 23:39、San Francisco Caltrain(Townsend) at 4th)、70,288、Subscriber、2139]](クラスorg.apache.spark.sql.catalyst.expressions.GenericRowWithSchemaの)

results = g.pageRank(resetProbability=0.15, maxIter=10, sourceId="id")

Py4JJavaError:o166.runの呼び出し中にエラーが発生しました。:org.graphframes.NoSuchVertexException:GraphFrameアルゴリズムは、グラフに存在しない頂点IDを指定しました。頂点ID idがGraphFrame(v:[id:int、name:string、lat:double、long:double、dockcount:int、landmark:string、installation:string]、e:[src:string、dst:string 、id:int、Duration:int、Start Date:string、Start Terminal:int、End Date:string、End Terminal:int、Bike#:int、Subscriber Type:string、Zip Code:string])

ranks = g.pageRank.resetProbability(0.15).maxIter(10).run()

AttributeError: 'function'オブジェクトには属性 'resetProbability'がありません

ranks = g.pageRank(resetProbability=0.15, maxIter=10).run()

Py4JJavaError:o188.runの呼び出し中にエラーが発生しました。 localhost):scala.MatchError:[null、null、[913460,765,8/31/2015 23:26、Harry Bridges Plaza(Ferry Building)、50,8/31/2015 23:39、San Francisco Caltrain(Townsend) at 4th)、70,288、Subscriber、2139]](クラスorg.apache.spark.sql.catalyst.expressions.GenericRowWithSchemaの)

私は読んでいますPageRank しかし、私が間違っている場所を理解してはいけない。

回答 1 件
  • 問題は、頂点の定義方法でした。 「station_id」の名前を「id」に変更していましたが、実際には「name」である必要がありました。

    verticesRDD = verticesRDD.withColumnRenamed("station_ID", "id")
    
    

    である必要があります

    verticesRDD = verticesRDD.withColumnRenamed("name", "id")
    
    

    この変更でpageRankが適切に機能する!

あなたの答え