pyspark Dataframe - сравнение двойного столбца с столбцом массива двойников - тип Mismatch? [Дубликат]

Из Javadoc :

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

blockquote>

Под капотом вы потребляете байты из потока TCP, поэтому не удивительно, что вы не можете дважды получить одно и то же значение столбца.

4
задан Rainfield 10 September 2016 в 03:09
поделиться

2 ответа

Конечно, это возможно и не так сложно. Для этого вы можете использовать UDF.

import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._

val df = sc.parallelize(Array(
  ("1", Array("1", "2", "3")),
  ("2", Array("1", "2", "2", "3")),
  ("3", Array("1", "2"))
)).toDF("user", "users")

val inArray = udf((id: String, array: scala.collection.mutable.WrappedArray[String]) => array.contains(id), BooleanType)

df.where(inArray($"user", $"users")).show()

Выход:

+----+------------+
|user|       users|
+----+------------+
|   1|   [1, 2, 3]|
|   2|[1, 2, 2, 3]|
+----+------------+
5
ответ дан Alberto Bonsanto 18 August 2018 в 10:49
поделиться

Быстро и просто:

import org.apache.spark.sql.functions.expr

df.where(expr("array_contains(users, user)")
9
ответ дан zero323 18 August 2018 в 10:49
поделиться
  • 1
    Благодарю. И это, и принятое, но я могу принять только один ответ. – Rainfield 10 September 2016 в 18:26
Другие вопросы по тегам:

Похожие вопросы: