Java.lang.ClassCastException: класс java.lang.String невозможно привести к классу org.apache.spark.unsafe.types.VariantVJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java.lang.ClassCastException: класс java.lang.String невозможно привести к классу org.apache.spark.unsafe.types.VariantV

Сообщение Anonymous »

Я оцениваю метод Spark 4 try_variant_get, обрабатывающий данные типа варианта. Сначала я привожу примеры операторов sql.

Код: Выделить всё

CREATE TABLE family (
id INT,
data VARIANT
);

INSERT INTO family (id, data)
VALUES
(1, PARSE_JSON('{"name":"Alice","age":30}')),
(2, PARSE_JSON('[1,2,3,4,5]')),
(3, PARSE_JSON('42'));
При выполнении SQL ошибок не возникает. Затем ниже приведены коды команды выбора с использованием метода try_variant_get

Код: Выделить всё

SELECT
id,
try_variant_get(data, '$.name', 'STRING') AS name,
try_variant_get(data, '$.age', 'INT') AS age
FROM
family
WHERE
try_variant_get(data, '$.name', 'STRING') IS NOT NULL;
Вывод SQL успешно возвращен. Затем я преобразую эти операторы SQL в коды Java API.

Код: Выделить всё

SparkSession spark = SparkSession.builder().master("local[*]").appName("VariantExample").getOrCreate();

StructType schema = new StructType()
.add("id", DataTypes.IntegerType)
.add("data", DataTypes.VariantType);

Dataset df = spark.createDataFrame(
Arrays.asList(
RowFactory.create(1, "{\"name\":\"Alice\",\"age\":30}"),
RowFactory.create(2, "[1,2,3,4,5]"),
RowFactory.create(3, "42")
),
schema
);

Dataset df_sel = df.select(
col("id"),
try_variant_get(col("data"), "$.name", "String").alias("name"),
try_variant_get(col("data"), "$.age", "Integer").alias("age")
).where("name IS NOT NULL");

df_sel.printSchema();
df_sel.show();
Но эти Java-коды вызывают следующие исключения.

Код: Выделить всё

root
|-- id: integer (nullable = true)
|-- name: string (nullable = true)
|-- age: integer (nullable = true)

Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class org.apache.spark.unsafe.types.VariantVal (java.lang.String is in module java.base of loader 'bootstrap'; org.apache.spark.unsafe.types.VariantVal is in unnamed module of loader 'app')
at org.apache.spark.sql.catalyst.expressions.variant.VariantGet.nullSafeEval(variantExpressions.scala:282)
at org.apache.spark.sql.catalyst.expressions.BinaryExpression.eval(Expression.scala:692)
at org.apache.spark.sql.catalyst.expressions.Alias.eval(namedExpressions.scala:159)
at org.apache.spark.sql.catalyst.expressions.InterpretedMutableProjection.apply(InterpretedMutableProjection.scala:89)
at org.apache.spark.sql.catalyst.optimizer.ConvertToLocalRelation$$anonfun$apply$48.$anonfun$applyOrElse$83(Optimizer.scala:2231)
at scala.collection.immutable.List.map(List.scala:247)
at scala.collection.immutable.List.map(List.scala:79).....
У параметра «String» метода try_variant_get есть некоторые проблемы. Но я понятия не имею, что не так с этими Java-кодами. Пожалуйста, сообщите мне, как исправить эти ошибки.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -class-org
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»