用Java或scala将CSV转换为Avro文件
是否有用于将CSV转换为Java或scala中的Avro文件的库用Java或scala将CSV转换为Avro文件,java,scala,csv,avro,Java,Scala,Csv,Avro,是否有用于将CSV转换为Java或scala中的Avro文件的库 我试图用谷歌搜索它,但找不到它的任何库。通过谷歌搜索,我找到了这篇文章: 引述: 要使用Hive将csv数据转换为Avro数据,我们需要执行以下步骤: 创建存储为textfile的配置单元表,并指定csv分隔符 使用“加载数据”命令将csv文件加载到上表 使用AvroSerDe创建另一个配置单元表 使用“插入覆盖”命令将数据从以前的表插入新的Avro配置单元表 示例:使用csv(学生id、科目id、年级) 您可以通过以下方式轻松完
我试图用谷歌搜索它,但找不到它的任何库。通过谷歌搜索,我找到了这篇文章: 引述: 要使用Hive将csv数据转换为Avro数据,我们需要执行以下步骤:
您可以通过以下方式轻松完成:
- 使用OpenCSV库解析您的CSV()
- 使用json智能库()输出Avro json(用于模式)
- 您可以尝试这种方法(Spark 1.6)
皮斯帕克
file = sc.textFile("people.csv")
df = file.map(lambda line: line.split(',')).toDF(['name','age'])
>>> df.show()
+-------+---+
| name|age|
+-------+---+
|Michael| 29|
| Andy| 30|
| Justin| 19|
+-------+---+
df.write.format("com.databricks.spark.avro").save("peopleavro")
Peopleavro
{u'age': u' 29', u'name': u'Michael'}
{u'age': u' 30', u'name': u'Andy'}
{u'age': u' 19', u'name': u'Justin'}
如果您需要维护数据类型,那么创建一个模式并传递它
schema = StructType([StructField("name",StringType(),True),StructField("age",IntegerType(),True)])
df = file.map(lambda line: line.split(',')).toDF(schema)
>>> df.printSchema()
root
|-- name: string (nullable = true)
|-- age: integer (nullable = true)
现在你的avro
{
"type" : "record",
"name" : "topLevelRecord",
"fields" : [ {
"name" : "name",
"type" : [ "string", "null" ]
}, {
"name" : "age",
"type" : [ "int", "null" ]
} ]
}
为此,您可以使用spark或spark shell(带有选项:--packages org.apache.spark:spark avro…),如果这是一种特殊用法的话 示例代码示例:
val df=spark.read.csv(“example.csv”)
df.write.format(“com.databricks.spark.avro”).save(“example.avro”)
但它正在使用配置单元进行转换。我需要泛型,这样我们就可以使用anywhere csv模式来命名字段,而Avro也有类型。您希望如何生成Avro方案的类型?或者您是否有一个已知的用Java/Scala类表示的模式?假设您可能知道该模式。。。如果不是的话,我认为@Bala的答案应该是正确的,这可能也会有所帮助
schema = StructType([StructField("name",StringType(),True),StructField("age",IntegerType(),True)])
df = file.map(lambda line: line.split(',')).toDF(schema)
>>> df.printSchema()
root
|-- name: string (nullable = true)
|-- age: integer (nullable = true)
{
"type" : "record",
"name" : "topLevelRecord",
"fields" : [ {
"name" : "name",
"type" : [ "string", "null" ]
}, {
"name" : "age",
"type" : [ "int", "null" ]
} ]
}