Как я могу узнать, что такое "join" эквивалентно "select from a, b, где a.id = b.id;"в писпарк? - PullRequest
0 голосов
/ 09 февраля 2019

Я новичок в pyspark, и у меня есть CSV-файл "test", содержащий поля:

click, impresion, userid

И еще один CSV "profile1", содержащий:

идентификатор пользователя, пол, возраст

Моя цель - иметь возможность выполнить запрос sql для этих двух файлов:

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

С помощью блоков данных я импортирую оба файла CSVи определите пару таблиц "profile1" с click, impresion и userid и "test" с userid, age и sex в качестве полей.

Сделано, что я делаю следующее, чтобы выполнить действие, которое я хочу сделать:

Итак, я открываю рабочую среду в кирпичах данных и с помощью 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.

IКроме того, в блоках данных было проверено следующее:

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()


Являются ли эти два фрагмента кода эквивалентными с точки зрения данных, которые они получают?Если нет, то как мне сделать код с объединением, эквивалентным первому?

Я хочу добавить, что если я выполню оба запроса, они не будут возвращать один и тот же результат.

Спасибо!

...