Python 如何使用pyspark连接不同的数据集,然后调用一个自定义函数,该函数将数据帧转换为xml文件
我正在尝试使用pyspark连接不同的数据集(hadoop导出文件),然后调用一个自定义函数,该函数使用pandas数据帧转换为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
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中并行读取它们