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

使用spark sql在配置单元表中从列表中插入数据

申屠英韶
2023-03-14

我有一个文件名、FilePath和FileSize的列表,我想使用spark SQL将这些细节插入到我的配置单元表中。

var fs1 = FileSystem.get(sparksession.sparkContext.hadoopConfiguration)
var file_path = fs1.listStatus(new  Path("path")).filter(_.isFile).map(_.getPath).toList
var new_files = fs1.listStatus(new  Path("path")).filter(_.isFile).map(_.getPath.getName).toList
var file_size = fs1.listStatus(new Path("path")).filter(_.isFile).map(_.getLen).toList
var file_data = file_path zip new_files zip file_size

for ((filedetail, size) <- file_size){
  var filepath = filedetail._1
  var filesize: Long = size
  var filename = filedetail._2
  var df = spark.sql(s"insert into mytable(file_path,filename,file_size)  select '${file_path}' as file_path,'${new_files}' as filename,'${file_size}' as file_size")
  df.write.insertInto("dbname.tablename")
}
insert into mytable(file_path,filename,file_size) select  'List(path/filename.txt,path/filename4.txt,path/filename5.txt)' as file_path,'List(filename.txt, filename4.txt, filename5.txt)' as filename,'List(19, 19, 19)' as file_size;
file_path                 filename      file_size
path/filename.txt         filename.txt  19
path/filename4.txt        filename4.txt  19
path/filename5.txt        filename5.txt  19

是否有任何方法可以再次将此查询拆分为3个不同的insert hive语句。

    insert into mytable(file_path,filename,file_size) select 'path/filename.txt' as file_path,'filename.txt' as filename,'19' as file_size;
    insert into mytable(file_path,filename,file_size) select 'path/filename3.txt' as file_path,'filename3.txt' as filename,'19' as file_size;
    insert into mytable(file_path,filename,file_size) select 'path/filename4.txt' as file_path,'filename4.txt' as filename,'19' as file_size;

共有1个答案

仇建茗
2023-03-14

您可以简单地创建一个包含所有行的列表,每行将有3个元素。创建一个dataframe,然后使用dataframe持久化数据。

参考这篇文章

 类似资料:
  • 我试图做一些性能优化的数据存储。这个想法是使用蜂巢的巴克特/集群来桶可用的设备(基于列id)。我目前的方法是从外部表插入数据到表中的拼花文件。结果它应用了巴克特。 我想通过直接从PySpark 2.1将数据摄取到该表中来摆脱中间的这一步。使用SparkSQL执行相同的语句会导致不同的结果。添加cluster by子句 仍然会导致不同的输出文件。 这就引出了两个问题:1)从spark向集群蜂箱表中插

  • 查询示例: 典型错误消息: 处理语句时出错:失败:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapredTask返回代码2 问题2:当我运行命令?我是否只运行相同的命令,但使用STRING而不是bigint?**完整错误消息:**

  • 我正在尝试将用户在表单中输入的值插入数据库。 我有两个下拉列表用于血液测试,然后是分类。例如,用户首先选择下拉列表1“甲状腺”(类别),然后下拉列表2显示“FT4、FT3 TSH”(血液检测)等,用户进行选择。 然后他们输入日期和值。 在我的insert中,我需要在我的数据库中插入用户id(在使用会话变量登录后建立)、血液测试id(从下拉列表2)、日期和值。 我不能得到我的SQL查询正确的插入一般

  • 我正在HIVE中编写代码来创建一个由1300行和6列组成的表: 现在,我想添加另一列,它包含所有1300行的唯一值,值将是。max_count是我现有表中的一列。我怎么能做到?我试图通过以下代码更改表