小编spa*_*our的帖子

如何将基于案例类的RDD转换为DataFrame?

星火文档演示如何创建从一个RDD数据框,使用Scala的case类来推断架构.我正在尝试使用重现此概念sqlContext.createDataFrame(RDD, CaseClass),但我的DataFrame最终为空.这是我的Scala代码:

// sc is the SparkContext, while sqlContext is the SQLContext.

// Define the case class and raw data
case class Dog(name: String)
val data = Array(
    Dog("Rex"),
    Dog("Fido")
)

// Create an RDD from the raw data
val dogRDD = sc.parallelize(data)

// Print the RDD for debugging (this works, shows 2 dogs)
dogRDD.collect().foreach(println)

// Create a DataFrame from the RDD
val dogDF = sqlContext.createDataFrame(dogRDD, classOf[Dog])

// Print the DataFrame for debugging (this fails, shows …
Run Code Online (Sandbox Code Playgroud)

scala dataframe apache-spark rdd apache-spark-sql

10
推荐指数
2
解决办法
2万
查看次数

在SQLContext之外用Java创建SparkSQL UDF

问题

我想在Java中创建一个用户定义的函数,可以在Apache Spark运算符链中作为Java方法调用.我在查找不需要在SQL查询中存在UDF的Java示例时遇到了麻烦.

版本

  • Java 8
  • 斯卡拉2.10.6
  • Apache Spark 1.6.0预装为Hadoop 2.6.0

我尝试过的是什么

我可以用Java成功创建UDF.但是,我不能使用它,除非它在SQL查询中:

import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.types.DataTypes;

sqlContext.udf().register("udfUppercase",
    (String string) -> string.toUpperCase(), DataTypes.StringType);

DataFrame oldDF = // a simple DataFrame with a "name" column
oldDF.registerTempTable("df");
DataFrame newDF = sqlContext.sql("SELECT udfUppercase(name) AS name_upper FROM df");
Run Code Online (Sandbox Code Playgroud)

我被困在哪里

我希望Java中的非SQL方法调用样式的UDF看起来像这样:

import static org.apache.spark.sql.functions.udf;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.UserDefinedFunction;
import org.apache.spark.sql.types.DataTypes;

UserDefinedFunction udfUppercase = udf(
    (String string) -> string.toUpperCase(), DataTypes.StringType);

DataFrame oldDF = // a simple DataFrame with a "name" column
newDF = oldDF.withColumn("name_upper", …
Run Code Online (Sandbox Code Playgroud)

java user-defined-functions dataframe apache-spark apache-spark-sql

3
推荐指数
1
解决办法
7667
查看次数