将RDD数据转换为数据帧。但我无法这样做。 ToDf无法正常工作,我也尝试使用数组RDD到数据帧。请告诉我。这个程序用于使用scala和spark
解析样本excelimport java.io.{File, FileInputStream}
import org.apache.poi.xssf.usermodel.XSSFCell
import org.apache.poi.xssf.usermodel.{XSSFSheet, XSSFWorkbook}
import org.apache.poi.ss.usermodel.Cell._
import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.sql.types.{ StructType, StructField, StringType, IntegerType };
object excel
{
def main(args: Array[String]) =
{
val sc = new SparkContext(new SparkConf().setAppName("Excel Parsing").setMaster("local[*]"))
val file = new FileInputStream(new File("test.xlsx"))
val wb = new XSSFWorkbook(file)
val sheet = wb.getSheetAt(0)
val rowIterator = sheet.iterator()
val builder = StringBuilder.newBuilder
var column = ""
while (rowIterator.hasNext())
{
val row = rowIterator.next();
val cellIterator = row.cellIterator();
while (cellIterator.hasNext())
{
val cell = cellIterator.next();
cell.getCellType match {
case CELL_TYPE_NUMERIC ⇒builder.append(cell.getNumericCellValue + ",")
case CELL_TYPE_BOOLEAN ⇒ builder.append(cell.getBooleanCellValue + ",")
case CELL_TYPE_STRING ⇒ builder.append(cell.getStringCellValue + ",")
case CELL_TYPE_BLANK ⇒ builder.append(",")
}
}
column = builder.toString()
println(column)
builder.setLength(0)
}
val data= sc.parallelize(column)
println(data)
}
}
答案 0 :(得分:1)
将Spark RDD
转换为DataFrame
。您必须根据spark版本制作sqlContext
或sparkSession
,然后使用
val sqlContext=new SQLContext(sc)
import sqlContext.implicits._
如果您正在使用 Spark 2.0 或更高版本,请使用SparkSession,因为新版本中不推荐使用SqlContext!
val spark=SparkSession.builder.config(conf).getOrCreate.
import spark.implicits._
这将允许您在RDD上使用toDF。 这可能会解决您的问题!
注意:对于使用sqlContext,你必须将 spark_sql 作为依赖项加入!