Как использовать функцию SPLIT Spark SQL для передачи ввода в параметр Spark SQL IN [дубликат]

Я использую это сейчас как обходной путь:

create or replace function random_uuid return RAW is
  v_uuid RAW(16);
begin
  v_uuid := sys.dbms_crypto.randombytes(16);
  return (utl_raw.overlay(utl_raw.bit_or(utl_raw.bit_and(utl_raw.substr(v_uuid, 7, 1), '0F'), '40'), v_uuid, 7));
end random_uuid;

Функция требует dbms_crypto и utl_raw. Оба требуют гранта выполнения.

grant execute on sys.dbms_crypto to uuid_user;
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 20 August 2018 в 09:12
поделиться

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

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

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

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