在Spark中读取Avro文件并提取列值

知道不多

我想使用Spark读取avro文件(我使用的是Spark 1.3.0,所以没有数据帧)

我使用这段代码读取了avro文件

import org.apache.avro.generic.GenericRecord
import org.apache.avro.mapred.AvroKey
import org.apache.avro.mapreduce.AvroKeyInputFormat
import org.apache.hadoop.io.NullWritable
import org.apache.spark.SparkContext

private def readAvro(sparkContext: SparkContext, path: String) = {
  sparkContext.newAPIHadoopFile[
    AvroKey[GenericRecord],
    NullWritable,
    AvroKeyInputFormat[GenericRecord]
  ](path)
}

我执行此操作并获得一个RDD。现在,从RDD中,如何提取特定列的值?像循环遍历所有记录并提供列名的值?

[编辑]如下面贾斯汀的建议,我尝试了

val rdd = sc.newAPIHadoopFile[AvroKey[GenericRecord], NullWritable, AvroKeyInputFormat[GenericRecord]](input)
rdd.map(record=> record._1.get("accountId")).toArray().foreach(println)

但我得到一个错误

<console>:34: error: value get is not a member of org.apache.avro.mapred.AvroKey[org.apache.avro.generic.GenericRecord]
              rdd.map(record=> record._1.get("accountId")).toArray().foreach(println)
贾斯汀·皮洪尼(Justin Pihony)

AvroKey具有datum提取包装值方法。并且GenericRecord具有get将列名作为字符串接受的方法。因此,您可以使用map

rdd.map(record=>record._1.datum.get("COLNAME"))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Spark中读取Avro文件

如何读取pyspark avro文件并提取值?

Grep文件并提取红宝石中的值

Scala读取json并提取所需的列数据

Spark读取Avro文件

无法使用Spark-Avro在DataProc Spark中读取Avro

如何读取csv文件并提取特定库仑?

Spark 2.4.1无法从HDFS读取Avro文件

遍历Pandas数据框中的行以查找其他文件中的值并提取索引

如何在Spark2.4的spark2-shell中读取Avro文件?

如果其他条件在熊猫数据框中并提取列值

从C中的文件读取一行并提取输入数

在python 3.0中同时读取两个文本文件并提取所需的字符串

从列中获取最大值,并提取至少包含该值20%的所有行

读取CSV文件并提取特定数据

循环浏览文件并提取文件名中的值。脚本不起作用

在shell脚本中解析文本文件并提取列表中的值

读取文件并提取到不同的输出

在jmeter中读取jsr223采样器中的json文件并提取数据

从文件中读取并提取一些内容以转为字典

spark 是否只能从 parquet 文件中读取满足某些条件的列值?

在 Pyspark 中读取数据集并提取特征

如何从powershell读取json文件并提取数组列表

将数据框中的值重新排列并提取到 R 中的特定列

在读取文本文件时提取列值

从 spark 数据框中的列中提取值并提取到两个新列

并行读取多个文件并提取数据

读取 CSV 文件并提取信息

如何在 Python 中使用 statistics.model() 读取 CSV 文件并提取其中最常见的值?