2016-10-24 57 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

请看看我已经更新了我的答案 –