写入Parquet文件时出现dotnet spark异常

c7rzv4ha  于 2021-05-26  发布在  Spark
关注(0)|答案(0)|浏览(285)

我只是在试用dotnet spark。我修改了示例程序,将Dataframe内容写入Parquet文件。然而,我得到一个例外,似乎没有一个有用的信息。我可以知道是什么导致了异常吗?或者异常日志在什么地方更有用?
20/12/09 15:04:32信息sqlhadoopmapreducecommitprotocol:使用输出提交程序类org.apache.parquet.hadoop.parquetoutputcommitter 20/12/09 15:04:32信息执行程序:执行程序在阶段6.0(tid 604)中终止了任务1.0,原因:阶段取消
[2020-12-09t07:04:32.6029517z][his2547][exception][jvmbridge]jvm方法执行失败:在microsoft.spark.interop.ipc.jvmbridge.calljavamethod(boolean isstatic,object classnameorjvmobjectreference,string methodname)上使用1个参数([index=1,type=string,value=myparquet1],)调用类22时,非静态方法parquet失败,object[]args)20/12/09 15:04:32警告tasksetmanager:阶段6.0中丢失任务1.0(tid 604,localhost,executor driver):taskkilled(阶段取消)
20/12/09 15:04:32信息taskschedulerimpl:从池异常保存到parquetsystem中删除了任务集6.0,其任务已全部完成。异常:jvm方法执行失败:当使用1个参数([index=1,type=string,value=myparquet1]调用类22时,非静态方法parquet失败,)在microsoft.spark.interop.ipc.JVMVBridge.calljavamethod(布尔isstatic,object classnameorjvmobjectreference,string methodname,object[]args)在microsoft.spark.interop.ipc.JVMVBridge.calljavamethod(布尔isstatic,object classnameorjvmobjectreference,string methodname,对象arg0),位于microsoft.spark.interop.ipc.jvmbridge.callnonstaticjavamethod(jvmobjectreference objectid,string methodname,object arg0),位于microsoft.spark.interop.ipc.jvmobjectreference.invoke(string methodname,c:\users\administrator\mysparkapp\program.cs中mysparkapp.program.main(string[]args)的microsoft.spark.sql.dataframewriter.parquet(字符串路径)中的对象arg0):第46行
这是我的密码:

class Program
{
    static void Main(string[] args)
    {
        //BuildWebHost(args).Run();

        // Create a Spark session
        SparkSession spark = SparkSession
            .Builder()
            .AppName("word_count_sample1")
            .GetOrCreate();

        // Create initial DataFrame
        DataFrame dataFrame = spark.Read().Text(@"C:\Users\Administrator\mySparkApp\input.txt");

        // Count words
        DataFrame words = dataFrame
            .Select(Functions.Split(Functions.Col("value"), " ").Alias("words"))
            .Select(Functions.Explode(Functions.Col("words"))
            .Alias("word"))
            .GroupBy("word")
            .Count()
            .OrderBy(Functions.Col("count").Desc());

        // Show results
        words.Show();

        try
        {
            //words.Write().Mode(SaveMode.Append).Parquet("parquet.wordcount");
            var dataFrameWriter = words.Write();
            dataFrameWriter.Mode(SaveMode.Overwrite); // Append does not work either
            dataFrameWriter.Parquet("myparquet1");
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception saving to parquet" + ex.ToString());
        }
        spark.Stop();
   }

基本上,代码只是创建我在parquet文件的path参数中指定的文件夹,但是内容是空的。如果我尝试读取先前由scala驱动程序使用dotnetspark创建的parquet文件,它读起来就很好。只有来自dotnetspark的写操作不起作用。任何帮助都将不胜感激。谢谢您!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题