Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在DataRicks中从csv格式到Redis哈希格式的数据传输_Scala_Apache Spark_Redis_Databricks_Azure Databricks - Fatal编程技术网

Scala 在DataRicks中从csv格式到Redis哈希格式的数据传输

Scala 在DataRicks中从csv格式到Redis哈希格式的数据传输,scala,apache-spark,redis,databricks,azure-databricks,Scala,Apache Spark,Redis,Databricks,Azure Databricks,我的Azure系统分为三个部分: Azure Data lake存储,其中我有一些csv文件。 Azure Databricks中,我需要进行一些处理——确切地说是将csv文件转换为Redis哈希格式。 Azure Redis缓存,我应该将转换后的数据放在其中。 在databricks文件系统中装载存储之后,需要处理一些数据。 如何将位于databricks文件系统中的csv数据转换为redisHash格式并正确地将其放入Redis? 具体地说,我不知道如何通过下面的代码进行正确的映射。或者,可

我的Azure系统分为三个部分:

Azure Data lake存储,其中我有一些csv文件。 Azure Databricks中,我需要进行一些处理——确切地说是将csv文件转换为Redis哈希格式。 Azure Redis缓存,我应该将转换后的数据放在其中。 在databricks文件系统中装载存储之后,需要处理一些数据。 如何将位于databricks文件系统中的csv数据转换为redisHash格式并正确地将其放入Redis? 具体地说,我不知道如何通过下面的代码进行正确的映射。或者,可能有一些我找不到的额外传输到SQL表的方法

下面是我在scala上编写的代码示例:

import com.redislabs.provider.redis._

val redisServerDnsAddress = "HOST"
val redisPortNumber = 6379
val redisPassword = "Password"
val redisConfig = new RedisConfig(new RedisEndpoint(redisServerDnsAddress, redisPortNumber, redisPassword))


val data = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load("/mnt/staging/data/file.csv")

// What is the right way of mapping?
val ds = table("data").select("Prop1", "Prop2", "Prop3", "Prop4", "Prop5" ).distinct.na.drop().map{x =>
  (x.getString(0), x.getString(1), x.getString(2), x.getString(3), x.getString(4))
}

sc.toRedisHASH(ds, "data")
错误:

error: type mismatch;
 found   : org.apache.spark.sql.Dataset[(String, String)]
 required: org.apache.spark.rdd.RDD[(String, String)]
sc.toRedisHASH(ds, "data")
org.apache.spark.sql.AnalysisException: Table or view not found: data;
如果我以这种方式编写最后一个代码字符串:

sc.toRedisHASH(ds.rdd, "data")
错误:

error: type mismatch;
 found   : org.apache.spark.sql.Dataset[(String, String)]
 required: org.apache.spark.rdd.RDD[(String, String)]
sc.toRedisHASH(ds, "data")
org.apache.spark.sql.AnalysisException: Table or view not found: data;

准备一些示例数据以模拟从CSV文件加载的数据

val rdd=spark.sparkContext.parallelizeSeqRow1,2,3,4,5,6,7 val structType=structType 序号 StructFieldProp1,StringType, StructFieldProp2,StringType, StructFieldProp3,StringType, StructFieldProp4,StringType, StructFieldProp5,StringType, StructFieldProp6,StringType, StructFieldProp7,StringType val data=spark.createDataFramerdd,structType 转变:

val transformedData=data.selectProp1、Prop2、Prop3、Prop4、Prop5.distinct.na.drop 将dataframe写入Redis,使用Prop1作为键,数据作为Redis表名。看

转换数据 写 .formatorg.apache.spark.sql.redis .optionkey.column,Prop1 .optiontable,数据 .modeSaveMode.Overwrite 拯救 检查Redis中的数据:

127.0.0.1:6379>按键数据:* 1数据:1 127.0.0.1:6379>hgetall数据:1 1提案5 2 5 3提案2 4 2 5建议4 6 4 7建议3 8 3
当您尝试查询表或视图时,会发生此错误。您已经从csv构建了数据帧,根据REDIS connector文档将其转换为RDD。非常感谢您的回答。似乎一切都应该工作,但我无法在文档中找到我的配置,以连接到您的代码示例的redis。据我正确理解,如果没有此配置,则会发生以下错误:redis.clients.jedis.exceptions.JedisConnectionException:无法从池中获取资源您应该将其作为spark配置选项,例如val spark=SparkSession.builder.appNameredis df.masterlocal[*].configspark.redis.host,localhost.configspark.redis.port,6379.getOrCreate另一种方法是直接使用dataframe选项覆盖这些连接设置,请参见DataRicks中的spark配置选项可以按此处所述进行更改是的,使用dataframe覆盖选项它工作得很好。再次感谢@Maksim很高兴知道您的问题已经解决。您可以将其接受为答案单击答案旁边的复选标记,将其从灰显切换为填充。这可能对其他社区成员有益。非常感谢。