Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用pyspark连接不同的数据集,然后调用一个自定义函数,该函数将数据帧转换为xml文件_Python_Pyspark - Fatal编程技术网

Python 如何使用pyspark连接不同的数据集,然后调用一个自定义函数,该函数将数据帧转换为xml文件

Python 如何使用pyspark连接不同的数据集,然后调用一个自定义函数,该函数将数据帧转换为xml文件,python,pyspark,Python,Pyspark,我正在尝试使用pyspark连接不同的数据集(hadoop导出文件),然后调用一个自定义函数,该函数使用pandas数据帧转换为xml文件 以下是我正在做的事情: def get_schema(header,col_num,file_name): fields = [StructField(field_name,StringType(),True) for field_name in header] schema = StructType(fields) new_file

我正在尝试使用pyspark连接不同的数据集(hadoop导出文件),然后调用一个自定义函数,该函数使用pandas数据帧转换为xml文件

以下是我正在做的事情:

def get_schema(header,col_num,file_name):
    fields = [StructField(field_name,StringType(),True) for field_name in header]
    schema = StructType(fields)
    new_file = sc.textFile(file_name)
    temp = new_file.map(lambda k: k.split("\x01")).map(lambda p : [eval("p["+str(ent)+"]") for ent in col_num])
    df = sqlContext.createDataFrame(temp, schema)
    return df

pow_header = [a,b,c]
chan_header = [a,b,d,e,f]
df_pow = get_schema(pow_header,[0,1,3],"pow_sample")
df_chan = get_schema(chan_header,[0,3,5,6,7],"chan_sample")
df_pow.registerTempTable("power")
df_chan.registerTempTable("chan")
query = "select a,b,c,NULL as d,NULL as e, NULL as f from power p UNION ALL\
         select a,b,NULL as c, d,e,f from tune t"
result = sqlContext.sql(query)
test = result.sort(a,b).rdd
data = test.flatMap(lambda x: my_func(x,dt)).collect()
我在这里要做的是,使用我加入的数据集,我需要写出xml文件,但这是使用我的自定义函数my_func完成的

我无法执行此操作,出现以下错误:

原因:org.apache.spark.api.python.python异常:回溯 (最近一次调用上次):文件 “/usr/local/spark/python/lib/pyspark.zip/pyspark/worker.py”,第98行, 大体上 command=pickleSer._read_,带有长度(infle)文件“/usr/local/spark/python/lib/pyspark.zip/pyspark/serializers.py”,第行 164,按长度读取 返回self.load(obj)文件“/usr/local/spark/python/lib/pyspark.zip/pyspark/serializers.py”,第行 422,装载量 return pickle.load(obj)ImportError:没有名为my_func的模块

    at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:166)
    at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:207)
    at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:125)
    at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:70)
    at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:300)
    at org.apache.spark.rdd.RDD.iterator(RDD.scala:264)
    at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
    at org.apache.spark.scheduler.Task.run(Task.scala:88)
    at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    ... 1 more
位于org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:166)
位于org.apache.spark.api.python.PythonRunner$$anon$1。(PythonRDD.scala:207)
位于org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:125)
位于org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:70)
在org.apache.spark.rdd.rdd.computeOrReadCheckpoint(rdd.scala:300)上
位于org.apache.spark.rdd.rdd.iterator(rdd.scala:264)
位于org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)
位于org.apache.spark.scheduler.Task.run(Task.scala:88)
位于org.apache.spark.executor.executor$TaskRunner.run(executor.scala:214)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 还有一个

哪里是
my_func
?@WoodChopper from func import my_func是我的python类文件,在本机python甚至python解释器中使用时效果非常好。我也可以使用spark csv写出csv,但问题是paritionby columnName并没有创建完美的分区,因此,我可以写出csv并在python中并行读取它们这里是
my_func
?@WoodChopper from func import my_func是我的python类文件,当在本机python甚至python解释器中使用时,它可以完美地工作。另外,我可以使用spark csv写出csv,但问题是paritionby columnName并没有创建完美的分区,所以我可以写出csv并在python中并行读取它们