[英]Spark Scala Dataframe Conversion
我有一個以〜分隔的文本文件,我需要先進行一些解析,然后才能轉換為數據幀。 該代碼讀取文本文件,因為RDD [String]進行了一些解析。 然后,它將轉換為RDD [Row]。 然后使用該架構創建一個數據框。
所以下面是我的以下代碼。 它可以工作,但問題是實際架構的長度為400個字段。 我想知道是否有比鍵入attribute(1),attributes(2),attributes(3)...更簡單的方法。
我目前正在使用Spark 1.6。 CDH 5.2.2
輸入示例:
20161481132310 ~ ~"This" is a comma 10
當前代碼:
val schema_1 = StructType(Array(
StructField("EXAMPLE_1", StringType, true),
StructField("EXAMPLE_2", StringType, true),
StructField("EXAMPLE_3", StringType, true)))
val rdd = sc.textFile("example.txt")
val rdd_truncate = rdd.map(_.split("~").map(_.trim).mkString("~"))
val row_final = rdd_truncate
.map(_.split("~"))
.map(attributes => Row(attributes(0),
attributes(1),
attributes(2)))
val df = sqlContext.createDataFrame(row_final, schema_1)
根據建議,我修改了以下內容。 除引號外,它均有效。 輸入中的“ This”將失敗。 有什么建議么?
val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("delimiter","~")
.schema(schema)
.load("example.txt")
val df_final = df.select(df.columns.map(c =>trim(col(c)).alias(c)): _*)
只需使用標准的CSV閱讀器即可:
spark.read.schema(schema).option("delimiter", "~").csv("example.txt")
如果要修剪字段,請使用select
:
import org.apache.spark.sql.functions.{col, trim}
df.select(df.columns.map(c => trim(col(c)).alias(c)): _*)
如果使用Spark 1.x,則可以使用spark-csv
:
sqlContext.read
.format("com.databricks.spark.csv")
.schema(schema)
.option("delimiter", "~")
.load("example.txt")
如果由於某種原因這還不夠,您可以使用Row.fromSeq
:
Row.fromSeq(line.split("~").take(3))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.