2016-10-24 94 views
0

RDD數據將被轉換爲數據幀。但我無法這樣做。 ToDf不工作,我也嘗試使用數組RDD到數據框。請告知me.This程序是一個用於解析一個示例Excel使用階和火花rdd字符將被轉換爲數據幀

import 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) 
    } 
    } 
+1

你是不是做與你在這裏列出的代碼... –

+0

哦星火什麼,我沒看出來有在底部。無論如何,@Shivansh Srivastava已經給你答案。 –

回答

1

用於轉換Spark RDDDataFrame。你必須做一個sqlContextsparkSession根據火花版本,然後

val sqlContext=new SQLContext(sc) 
    import sqlContext.implicits._ 

櫃面您正在使用星火2.0以上使用SparkSession不是作爲SqlContext在新版本棄用使用!

val spark=SparkSession.builder.config(conf).getOrCreate. 
import spark.implicits._ 

這將允許您在RDD上使用toDF。 這可能會解決您的問題!

注意:對於使用sqlContext,您必須將spark_sql作爲依賴!

+0

不,你必須自己創建sqlcontext和SparkSession,以防你使用Spark2.0 –

+0

請看看我已經更新了我的答案 –