dataFrame.Select,从文件中选择DataFrame列



我正在尝试从父数据库创建子数据框。但是我有100多个Col可以选择。因此,在选择语句中,我可以从文件中提供列吗?

val Raw_input_schema=spark.read.format("text").option("header","true").option("delimiter","t").load("/HEADER/part-00000").schema
val Raw_input_data=spark.read.format("text").schema(Raw_input_schema).option("delimiter","t").load("/DATA/part-00000")
val filtered_data = Raw_input_data.select(all_cols)

如何从all_cols中的文件中发送列名

我假设您会从HDFS或共享配置文件中读取文件?原因,在群集上,该代码将在单个节点等上执行。

在这种情况下,我将使用下一个代码进行处理:

  import org.apache.spark.sql.functions.col
  val lines = Source.fromFile("somefile.name.csv").getLines
  val cols = lines.flatMap(_.split(",")).map( col(_)).toArray
  val df3 = df2.select(cols :_ *)

本质上,您只需要提供一系列字符串和使用:_ *对参数数量的符号。

最后对我有用;

val Raw_input_schema=spark.read.format("csv").option("header","true").option("delimiter","t").load("headerFile").schema
val Raw_input_data=spark.read.format("csv").schema(Raw_input_schema).option("delimiter","t").load("dataFile")
val filtered_file = sc.textFile("filter_columns_file").map(cols=>cols.split("t")).flatMap(x=>x).collect().toList
//or
val filtered_file = sc.textFile(filterFile).map(cols=>cols.split("t")).flatMap(x=>x).collect().toList.map(x => new Column(x))
val final_df=Raw_input_data.select(filtered_file.head, filtered_file.tail: _*)
//or
val final_df = Raw_input_data.select(filtered_file:_*)'

相关内容

  • 没有找到相关文章

最新更新