#python #apache-spark
#python #apache-spark
Вопрос:
В pandas я могу успешно выполнить следующее:
def car(t)
if t in df_a:
return df_a[t]/df_b[t]
else:
return 0
Но как я могу сделать то же самое с spark dataframe?Большое спасибо!
Данные выглядят следующим образом
df_a
a 20
b 40
c 60
df_b
a 80
b 50
e 100
Результат должен быть 0.25 при вводе car (a)
Комментарии:
1. Что вы пытаетесь вычислить?
2. Я использую hadoop, просто хочу преобразовать код из pandas в spark
3. Да, но что делает эта функция, вы должны показать ввод и вывод.
4. df_a содержит идентификатор, я запускаю df_a.value_counts() перед запуском приведенного выше кода.
5. Вы используете Scala или Pyspark?
Ответ №1:
Сначала вы должны join
использовать оба фрейма данных, затем вы должны указать нужную filter
букву и select
нужную операцию.
df_a = sc.parallelize([("a", 20), ("b", 40), ("c", 60)]).toDF(["key", "value"])
df_b = sc.parallelize([("a", 80), ("b", 50), ("e", 100)]).toDF(["key", "value"])
def car(c):
return df_a.join(df_b, on=["key"]).where(df_a["key"] == c).select((df_a["value"] / df_b["value"]).alias("ratio")).head()
car("a")
# Row(ratio=0.25)
Комментарии:
1. Еще один вопрос, может ли ввод быть фреймом данных? Я хотел бы ввести фрейм данных df_c, который содержит ключ, а затем car() будет перебирать каждую строку ключа в df_c, а затем на выходе будет соотношение для каждого ключа.
2. Сначала вы должны показать мне пример. Однако избегайте думать таким императивным образом, spark ленив, и большая часть вычислений выполняется параллельно