在星火文档演示如何创建从一个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) 问题
我想在Java中创建一个用户定义的函数,可以在Apache Spark运算符链中作为Java方法调用.我在查找不需要在SQL查询中存在UDF的Java示例时遇到了麻烦.
版本
我尝试过的是什么
我可以用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