下面的scala代码使用一个函数来计算用户输入UnityWebRequest www = new UnityWebRequestAssetBundle(FileManager.RequestFile(path);
yield return www.SendWebRequest();
if (request.isNetworkError || request.isHttpError)
{
Debug.Log(www.error.ToString());
}
else
{
// for testing only // if yield return www.SendWebRequest(); is working as expected www.isDone = true here!
while (!www.isDone)
{
Debug.Log("Something is wrong! " + www.responseCode);
yield return new WaitForSeconds(0.1f);
}
// do whatever you want
}
和start
日期之间的天数。然后,它将遍历该时间范围内的aws s3文件。
end
我在创建一个数据帧时遇到麻烦,该数据帧是上述功能反复访问的所有文件的集合。我认为可能使用def getS3Data(s3Loc: String): DataFrame = {
println(s"Reading Avro from ${s3Loc}")
val cosimDf = spark.read.format("com.databricks.spark.avro")
.load(s3Loc)
cosimDf
}
val daysCount = Days.daysBetween(start,end).getDays()
(0 until daysCount).map(start.plusDays(_)).foreach{x => {var myDir ="s3://AWS.Bucket/parsed/" + x.toString("yyyyMMdd") +"/"
val myDf = getS3Data(myDir)
}}
或将输出应用于模板可能有效,但似乎无法弄清楚如何实现。
欢迎任何帮助。
答案 0 :(得分:0)
您可以在循环中创建数据框
如果知道存储在avro文件中的记录的类型,则只需将foreach
替换为foldLeft
并将初始值设置为给定类型的空数据框
case class YourS3RowCaseClass(...) // replace with your type
val daysCount = Days.daysBetween(start,end).getDays()
val finalDf = (0 until daysCount).map(start.plusDays(_))
.foldLeft(spark.createDataFrame(Seq.empty[YourS3RowCaseClass])){
case (df, x) =>
var myDir ="s3://AWS.Bucket/parsed/" + x.toString("yyyyMMdd") +"/"
val myDf = getS3Data(myDir)
df.union(myDf)
}
如果您必须从数据框中推断类型,那么可能会有些棘手