Что это значит, когда DataFrame вызывает drop () без параметра? - PullRequest
0 голосов
/ 01 июня 2019

Я вижу код из книги "Spark The Definition Guide", он вызывает падение на информационном фрейме без параметров, когда я использую show (), я не нашел ничего измененного, но в чем его смысл?

Я выполняю его, ничего не изменилось, dfNoNull.show () - это то же самое, что и dfWithDate.show ()

dfWithDate.createOrReplaceTempView("dfWithDate")
// in Scala
val dfNoNull = dfWithDate.drop()
dfNoNull.createOrReplaceTempView("dfNoNull")

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

val df1=spark.sql("select id,date from date")
val df2=spark.sql("select id,date from date")
val joinedDf = spark.sql("select dateid1,dateid2 from sales")
.join(df1,df1["id"]===dateid1).join(df2,df2["id"]===dateid2)

Тогда возникает ошибка: декартово соединение!потому что ленивая оценка будет рассматривать df1 и df1 как одно и то же

, поэтому здесь, если я

val df2=df1.drop()

я предотвратим эту ошибку?

Если нет, что делаетметод drop без параметра означает?

Или это просто означает удаление имени временного представления и создание нового?

, но я пробую код, приведенный ниже, без исключений:

   val df=  Seq((1,"a")).toDF("id","name")
   df.createOrReplaceTempView("df1")
   val df2=df.drop()
    df2.createOrReplaceTempView("df2")
    spark.sql("select * from df1").show()

Или книга означает ниже?

 val dfNoNull = dfWithDate.na.drop()

, потому что она написана где-то ниже кода:

Группировка наборов зависит от нулевых значений для уровней агрегации.Если вы не отфильтруете нулевые значения, вы получите неверные результаты. Это относится к кубам, сверткам и группам множеств.

1 Ответ

2 голосов
/ 01 июня 2019
Функция отбрасывания

без параметров ведет себя так же, как и функция отбрасывания с именем столбца, которого нет в кадре данных.Вы можете следовать коду в источнике искры.

Даже в документации по функциям вы можете увидеть подсказку к этому поведению.

  /**
   * Returns a new Dataset with a column dropped. This is a no-op if schema doesn't contain
   * column name.
   *
   * This method can only be used to drop top level columns. the colName string is treated
   * literally without further interpretation.
   *
   * @group untypedrel
   * @since 2.0.0
   */

Так что при вызове функции без параметра no-происходит, и в возвращаемом DataFrame ничего не меняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...