pyspark.sql輸入SparkSessionから
輸入数学
os.pathインポートABSPATHから
デフcosSim(V1、V2):
メンバー=減らす(ラムダX、Yは、X + Y、マップ(ラムダD:D [0] * D [1]、ZIP(V1、V2)))
T1 = math.sqrt(N、(ラムダmを減らす:m + nは、マップ(ラムダX:math.pow(X、2)、V1)))
T2 = math.sqrt(N、(ラムダmを減らす:m + nは、マップ(ラムダX:math.pow(X、2)、V2)))
1.0 *部材/(T1 *のT2)を返します
warehouse_location = ABSPATH( 'スパーク倉庫')
スパーク= SparkSession.builder.appName( "pysparkのALS")。コンフィグ( "spark.sql.warehouse.dir"、warehouse_location).enableHiveSupport()。getOrCreate()
データ= spark.sql( "SELECTユーザーIDは、アイテムIDは、ユーザーIDによってテーブル群からスコアとして)*(カウント、ITEMID")
pyspark.mllib.recommendationインポート評価から
評価= data.rdd.map(ラムダX:評価(INT(X [0])、INT(X [1])、フロート(X [2])))
pyspark.mllib.recommendationインポートALSから
モデル= ALS.trainImplicit(評価、ランク= 10)
JF = model.productFeatures()
JF = spark.createDataFrame(JF)
JF = jf.withColumnRenamed( "_ 1"、 "ID")。withColumnRenamed( "_ 2"、 "機能")
VVV = spark.sql( "アイテムIDを選択し、コード、テーブルからCITY_CODE")
vjf = jf.join(VVV、jf.id == vvv.itemid)
cvjf = vjf.select( "アイテムID"、 "コード"、 "CITY_CODE"、 "機能")
jcvjf = cvjf.withColumnRenamed( "アイテムID"、 "xjobid")。withColumnRenamed( "コード"、 "Xcodeの")。withColumnRenamed( "CITY_CODE"、 "xcity_code")。withColumnRenamed( "機能"、 "xfeatures")
JJJ = cvjf.join(jcvjf、(cvjf.code == jcvjf.xcode)&(cvjf.city_code == jcvjf.xcity_code))
JJ = jjj.filter( "ITEMID!= xitemid")。( "アイテムID"、 "xitemid"、 "機能"、 "xfeaturesを")を選択
SJJ = jj.rdd.map(ラムダX(X [0]、X [1]、cosSim(X [2]、X [3])))
GSJ = sjj.groupBy(ラムダX:X [0])
SJ3 = gsj.map(ラムダX:STR(X [0])+ ' '+' は、' 参加(マップ(ラムダM:STR(M [1])、ソート(リスト(X [1])、キー=ラムダN:N [2]、逆= TRUE)[10])))
#printのsj3.collect()
sj3.saveAsTextFile( "/ HDFS / py_als_test")
spark.stop()