我怎么知道“从a,b选择a.id = b.id;的选择”中的“ join”等价物。在pyspark?

时间:2019-02-09 03:18:45

标签: dataframe pyspark databricks

我是pyspark的新手,我有一个CSV文件“ test”,其中包含以下字段:

点击,展示,用户ID

和另一个包含以下内容的CSV“ profile1”

用户名,性别,年龄

我的目标是能够对这两个文件执行类似的sql查询:

select age, sex, sum(click/impresion) from profile1,test where profile1.userid=test.userid group by age,sex

使用数据块,我导入了两个CSV文件,并定义了两个带有点击,展示和用户ID的表“ profile1”以及带有用户ID,年龄和性别的“测试”表。

完成以下操作即可执行我想做的动作:

所以我在databricks中打开一个工作台,并使用sqlContext执行以下操作

df3 = sqlContext.sql("select profile1.age, profile1.sex, sum((click/impresion)) from profile1,test where profile1.userid = test.userid group by profile1.age, profile1.sex")

我的目标是通过使用pyspark的数据帧或rdds检索相同的内容。

我也在数据块中测试了以下内容:

profile_file ="/FileStore/tables/profile.txt"
click_file = "/FileStore/tables/test.txt"
profile_lines = sc.textFile(profile_file)
click_lines = sc.textFile(click_file) 
profiledata = profile_lines.map(lambda l: l.split()).map(lambda l: ( int(l[0]), l[1], l[2] ))
clickdata = click_lines.map(lambda l: l.split()).map(lambda l: ( int(l[11]),float(l[0]),float(l[1])))

profiledf = spark.createDataFrame(profiledata, schema=['user', 'sex', 'age'])
clickdatadf = spark.createDataFrame(clickdata, schema=['user', 'click','impresion'])

ta = profiledf.alias('ta')
tb = clickdatadf.alias('tb')

inner_join = ta.join(tb, ta.user == tb.user)

joined = ta.join(tb, tb.user == ta.user).select('ta.user','tb.click','tb.impresion','ta.sex','ta.age')

grupo = joined.select(joined["click"]/joined["impresion"], joined["sex"],joined["age"]).groupby("age","sex")

grupo.sum("(click / impresion)").show()


这两段代码在它们检索的数据方面是否等效?如果没有,我该如何设法使连接的代码等于第一个代码?

我想补充一点,如果我同时运行两个查询,它们将不会返回相同的结果。

谢谢!

0 个答案:

没有答案