В результате самостоятельных объединений в массиве данных Spark создается пустой кадр данных. - PullRequest
0 голосов
/ 06 декабря 2018

Ниже приведены мои данные в формате csv, которые я считываю в фрейм данных.

id,pid,pname,ppid
 1,  1,    5,  -1
 2,  1,    7,  -1
 3,  2,    9,   1
 4,  2,   11,   1
 5,  3,    5,   1
 6,  4,    7,   2
 7,  1,    9,   3

Я читаю эти данные в фрейм данных data_df.Я пытаюсь сделать самостоятельное соединение на разных столбцах.Но данные кадры результатов пусты.Перепробовал несколько вариантов.

Ниже мой код.Только последний join4 дает результат.

val joined = data_df.as("first").join(data_df.as("second")).where( col("first.ppid") === col("second.pid"))
joined.show(50, truncate = false)

val joined2 = data_df.as("first").join(data_df.as("second"), col("first.ppid") === col("second.pid"), "inner")
joined2.show(50, truncate = false)

val df1 = data_df.as("df1")
val df2 = data_df.as("df2")
val joined3  = df1.join(df2, $"df1.ppid" === $"df2.id")
joined3.show(50, truncate = false)

val joined4  = data_df.as("df1").join(data_df.as("df2"), Seq("id"))
joined4.show(50, truncate = false)

Ниже приведены выходные данные join, join2, join3, join4 соответственно:

+---+---+-----+----+---+---+-----+----+
|id |pid|pname|ppid|id |pid|pname|ppid|
+---+---+-----+----+---+---+-----+----+
+---+---+-----+----+---+---+-----+----+

+---+---+-----+----+---+---+-----+----+
|id |pid|pname|ppid|id |pid|pname|ppid|
+---+---+-----+----+---+---+-----+----+
+---+---+-----+----+---+---+-----+----+

+---+---+-----+----+---+---+-----+----+
|id |pid|pname|ppid|id |pid|pname|ppid|
+---+---+-----+----+---+---+-----+----+
+---+---+-----+----+---+---+-----+----+

+---+---+-----+----+---+-----+----+
|id |pid|pname|ppid|pid|pname|ppid|
+---+---+-----+----+---+-----+----+
| 1 |  1|    5|  -1|  1|    5|  -1|
| 2 |  1|    7|  -1|  1|    7|  -1|
| 3 |  2|    9|   1|  2|    9|   1|
| 4 |  2|   11|   1|  2|   11|   1|
| 5 |  3|    5|   1|  3|    5|   1|
| 6 |  4|    7|   2|  4|    7|   2|
| 7 |  1|    9|   3|  1|    9|   3|
+---+---+-----+----+---+-----+----+

1 Ответ

0 голосов
/ 06 декабря 2018

Извините, позже выяснилось, что пробелы в csv вызывают проблему.Если я создаю правильно структурированный CSV из исходных данных, проблема исчезает.

Исправьте формат CSV следующим образом.

id,pid,pname,ppid
1,1,5,-1
2,1,7,-1
3,2,9,1
4,2,1,1
5,3,5,1
6,4,7,2
7,1,9,3

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

val data_df = spark.read
  .schema(dataSchema)
  .option("mode", "FAILFAST")
  .option("header", "true")
  .option("ignoreLeadingWhiteSpace", "true")
  .csv(dataSourceName)

pySpark (v2.4) DataFrameReader добавляет начальные пробелы к именам столбцов

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