как создать набор данных из [(Row, Row)] - PullRequest
0 голосов
/ 12 марта 2020

У меня есть функция, которая принимает Dataset[(Row, Row)], и я пытаюсь протестировать эту функцию, но я не уверен, как я могу создать набор данных, который будет иметь Dataset[(Row, Row)]

Я пробовал следующее но он говорит, что это типа tuple2[DataFrame, DataFrame]

      val df: Dataset[(Row,Row)] = (
        Seq(
          ("NOW", "active", 1, 11),
          ("BEFORE", "active", 2, 11),
          ("AFTER", "active", 3, 33)
        ).toDF(),
        Seq(
          ("NOW", "sub_uuid1", 1, "com_uuid1"),
          ("BEFORE", "sub_uuid2", 2, "com_uuid2"),
          (null, null, 3, null)
        ).toDF()
      )

как я могу написать выше, так что это будет иметь тип Dataset[(Row,Row)]

1 Ответ

0 голосов
/ 12 марта 2020

потому что вы создали кортеж из Dataset[Row]:

val ds1: Dataset[Row] = Seq(
          ("NOW", "active", 1, 11),
          ("BEFORE", "active", 2, 11),
          ("AFTER", "active", 3, 33)
        ).toDF()
val ds2: Dataset[Row] = Seq(
          ("NOW", "sub_uuid1", 1, "com_uuid1"),
          ("BEFORE", "sub_uuid2", 2, "com_uuid2"),
          (null, null, 3, null)
        ).toDF()

и только что сделали из них кортеж:

val df: (Dataset[Row], Dataset[Row]) = (ds1, ds2)

вы можете сделать то, что вам нужно, так:

val df: Dataset[(Row, Row)] =
  Seq(
    (Row("NOW", "active", 1, 11), Row("NOW", "sub_uuid1", 1, "com_uuid1")),
    (Row("BEFORE", "active", 2, 11), Row("BEFORE", "sub_uuid2", 2, "com_uuid2")),
    (Row("AFTER", "active", 3, 33), Row(null, null, 3, null))
  ).toDS()

На самом деле, создавать набор данных с кортежными строками - плохая практика. Если бы вы могли переписать свою функцию, взяв два кадра данных (DataFrame: a, DataFrame: b) вместо ab: Dataset[(Row, Row)], это было бы намного лучше.

...