【发布时间】:2018-02-24 14:50:59
【问题描述】:
我有一个包含 100 多行的输入数据框(从配置单元表创建)。对于数据框的每一行,我需要提取列值(大多数字符串)并将这些值传递给用户定义的函数。对于每一行,该函数使用这些输入值和其他中间数据帧(从配置单元表创建)来计算一组行并存储在结果数据帧中。 我如何实现这一点 - 请帮助。
我试过了:
var df1= hiveContext.sql("Select event_date,channelcode,st,tc,startsec,endsec from program_master")
var count1=df1.count()
df1 = df1.withColumn("INDEX", monotonically_increasing_id())
var i=1
while (i <= count1){
var ed = df1.filter(df1("INDEX") === s"""$i""").select(to_date(unix_timestamp(df1("ed"), "dd-MM-yy").cast(TimestampType)).cast(DateType)).first().getDate(0)
var cc = df1.filter(df1("INDEX") === s"""$i""").select(df1("cc")).first().getInt(0)
var ST = df1.filter(df1("INDEX") === s"""$i""").select(df1("ST")).first().getString(0)
var TC = df1.filter(df1("INDEX") === s"""$i""").select(df1("TC")).first().getString(0)
var ss = df1.filter(df1("INDEX") === s"""$i""").select(df1("ss")).first().getInt(0)
var es = df1.filter(df1("INDEX") === s"""$i""").select(df1("es")).first().getInt(0)
calculate_values(ed, cc, st, tc, ss, ss, sparkSession)
i=i+1
}
calculate_values def
def calculate_values(ed: Date,cc:Integer,ST:String,TC:String,ss:Integer,ss:Integer,sparkSession: SparkSession):Unit=
我尝试过的两个问题:因此没有输出 第 3 行:我希望它给出像 1,2,3,......100.... 这样的数字来使用 i 进行迭代 - 但它会生成非常大的随机数。 第 5 行:它抛出 java.util.NoSuchElementException: next on empty iterator
【问题讨论】:
-
请分享您到目前为止尝试过的内容?以及一些样本输入和预期输出。但在此之前澄清您的要求
-
添加了导致问题的代码和细节
标签: scala apache-spark apache-spark-sql