Я следую примеру из документации по соединителю spark-redis для создания Dataframes из существующего хэша.
Хеш построен следующим образом:
127.0.0.1: 6379> hset person: 1 имя Джон возраст 30
(целое число) 2
127.0.0.1: 6379> hset person: 2 имя Петр, возраст 45
(целое число) 2
127.0.0.1: 6379> hset person: 3 name Джеймс, возраст 40
Код для чтения хэша выглядит следующим образом -
SparkSession spark = SparkSession
.builder()
.appName("MyApp")
.master("local[*]")
.config("spark.redis.host", "localhost")
.config("spark.redis.port", "6379")
.getOrCreate();
Dataset<Row> df = spark.read()
.format("org.apache.spark.sql.redis")
.schema(new StructType(new StructField[] {
DataTypes.createStructField("id", DataTypes.StringType, true),
DataTypes.createStructField("name", DataTypes.StringType, false),
DataTypes.createStructField("age", DataTypes.IntegerType, false)
})
)
.option("keys.pattern", "person:*")
.option("key.column", "id")
.load();
df.show();
df.printSchema();
Выход
+----+-----+---+
| id| name|age|
+----+-----+---+
|null| John| 30|
|null|James| 40|
|null|Peter| 45|
+----+-----+---+
root
|-- id: string (nullable = true)
|-- name: string (nullable = false)
|-- age: integer (nullable = false)
Я ожидал 1, 2, 3 соответственно в столбце Id, но вместо этого получил значение null. Любые указатели на этот счет помогут. Также этот код написан на Java, поэтому я не уверен, что существует проблема с типами данных.