Spark Dataframe-Python

#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 ленив, и большая часть вычислений выполняется параллельно