当前位置: 首页 > 知识库问答 >
问题:

数据帧到RDD[(字符串,字符串)]的转换

周涵畅
2023-03-14

我想转换一个组织。阿帕奇。火花sql。数据框到组织。阿帕奇。火花rdd。RDD[(字符串,字符串)]在数据块中。有人能帮忙吗?

背景(也欢迎使用更好的解决方案):我有一个Kafka流,它(经过一些步骤)变成了2列数据帧。我想将其放入Redis缓存,第一列作为键,第二列作为值。

更具体地说,输入的类型是:lastContacts:org。阿帕奇。火花sql。数据帧=[序列号:字符串,上次修改:bigint]。我尝试将以下内容放入Redis:

sc.toRedisKV(lastContacts)(redisConfig)

错误消息如下所示:

notebook:20: error: type mismatch;
 found   : org.apache.spark.sql.DataFrame
    (which expands to)  org.apache.spark.sql.Dataset[org.apache.spark.sql.Row]
 required: org.apache.spark.rdd.RDD[(String, String)]
sc.toRedisKV(lastContacts)(redisConfig)

我已经尝试过一些想法(比如函数、rdd),但都没有任何帮助。

共有1个答案

龙新荣
2023-03-14

您可以使用df.map(row=

例如:

val df = Seq(("table1",432),
      ("table2",567),
      ("table3",987),
      ("table1",789)).
      toDF("tablename", "Code").toDF()

    df.show()

    +---------+----+
|tablename|Code|
+---------+----+
|   table1| 432|
|   table2| 567|
|   table3| 987|
|   table1| 789|
+---------+----+

    val rddDf = df.map(r => (r(0), r(1))).rdd // Type:RDD[(Any,Any)]

    OR

    val rdd = df.map(r => (r(0).toString, r(1).toString)).rdd  //Type: RDD[(String,String)]

请参考https://community.hortonworks.com/questions/106500/error-in-spark-streaming-kafka-integration-structu.html关于AnalysisException:具有流源的查询必须使用writeStream执行。开始()

您需要使用query等待查询的终止。waitTermination()以防止进程在查询处于活动状态时退出。

 类似资料:
  • 我遇到了这样一个java字符串,其中以下内容是错误的: 我想这是因为字符串构造函数默认将主体字节[]的编码视为UTF-8,我不是100%确定。我如何能够将此字符串存储在字节[]中,并能够稍后将其转换回来?我想我需要能够确定字节[]的编码方式。我该怎么做呢? 一些上下文:我需要字节[],以便压缩数据,将其存储在数据库中,然后解压缩并将未压缩的字节[]转换回原始字符串。这个字符串最初来自某个下载了网页

  • Golang具有strconv库,可以将字符串转换为int64和uint64。 但是,其余的整数数据类型似乎不受支持,因为我找不到byte、int16、uint16、int32、uint32数据类型的转换函数。 始终可以将字节、16位和32位数据类型转换为int64和uint64,而不会损失精度。这就是语言的意图吗?

  • 我正在制作一个Android应用程序,它可以与蓝牙设备进行通信。我正在为选定的特征写一条特定的信息,如下所示: 我的转换函数如下所示: 我试图弄清楚为什么在这种情况下,我的转换输出是这样的: D/上传数据集:消息:�������������������� 这很奇怪,因为当我使用相同的转换函数来转换作为蓝牙通知接收到的值时,它工作得非常好。欢迎提出问题所在的任何建议

  • 我试图获取任意长度的字符串[],并将其打印成字符串,最好使用字段分隔符。现在我有: 但是由于某种原因,它只是返回“第二个”值。我如何使它正确连接这些值? 另外,我可以使用来简化代码吗?谢谢

  • 我正在制作一个模拟制表方法(Quine McCluskey)的程序,并试图将字符串格式的输入转换为整数格式,最后再转换为字符串(二进制格式)格式。 编辑:我忘了包括这个方法…