我是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()
这两段代码在它们检索的数据方面是否等效?如果没有,我该如何设法使连接的代码等于第一个代码?
我想补充一点,如果我同时运行两个查询,它们将不会返回相同的结果。
谢谢!