将列表数据转换为数据框(表)时遇到问题。 我列表中有数据。(输入)
[['FWD,29052016:09:01,10.56','FWD,29052016:10:53,11.23','FWD,29052016:15:40,23.20'], ['SPOT,29052016:09:04,11.56','FWD,29052016:11:45,11.23','SPOT,29052016:12:30,23.20'], ['FWD,29052016:08:01,10.56','SPOT,29052016:12:30,11.23','FWD,29052016:13:20,23.20','FWD,29052016:14:340,56.00'], ['FWD,29052016:08:01,10.56','SPOT,29052016:12:30,11.23','FWD,29052016:13:20,23.20']]
预期的输出:(表格格式)在pyspark中查看。
FWD 29052016:09:01 10.56
FWD 29052016:10:53 11.23
SPOT 29052016:09:04 11.56
我已经尝试过但不能正常工作。
data1 = sc.parallelize(data)
data_converted = data1.map(lambda x:(x [0] [2],x [1] [1],x [2] [1]))
DF1 = sqlContext.createDataFrame(data_converted,schema)
获得结果 DF1.show()
但获得结果。那不符合我的要求。
产品类型|日期|时间
D| F| F|
O| F| S|
答案 0 :(得分:0)
此答案假定您仅在您的环境中有权访问pyspark。此外,此答案基于Spark 2.x,并使用了SparkSession(从pyspark.sql导入SparkSession),但是,使用SQLContext时,以前的版本应该达到类似的效果。
此答案以以下方式初始化spark上下文:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("my_app").getOrCreate()
此外,我假设您的数据还不错,并且原始文本文件的每一行都用“ |”分隔。每行只有一个字符串,.txt文件中的每个值都用“,”分隔。
读入文本文件并以“ |”分隔定界符以使其变为可行格式
file = open("/example.txt", "r")
data = file.read().split('|')
然后,我们必须去除空格并用“,”分隔字符串,以便获得列表列表,其中每个内部列表代表您期望的三列格式:
data = [x.strip().split(',') for x in data]
这看起来像这样(请注意,每一行只有一个乘积,日期和时间值):
[['FWD', '29052016:09:01', '10.56'], ['FWD', '29052016:10:53', '11.23']]
如果您的数据有点混乱,并且发现每个“行”都有3个以上的值,则需要使用清理功能以将其转换为正确的格式。
现在,我们为数据框创建架构(为此答案使用字符串):
from pyspark.sql.types import StructField, StructType
schema = StructType(
[
StructField("product", StringType(), True),
StructField("date", StringType(), True),
StructField("time", StringType(), True)
]
)
最后,创建spark数据框:
dataframe = spark.createDataFrame(data, schema)
使用您提供给我的示例的原始版本,结果如下:
+-------+---------------+-----+
|product| date| time|
+-------+---------------+-----+
| FWD| 29052016:09:01|10.56|
| FWD| 29052016:10:53|11.23|
| FWD| 29052016:15:40|23.20|
| SPOT| 29052016:09:04|11.56|
| FWD| 29052016:11:45|11.23|
| SPOT| 29052016:12:30|23.20|
| FWD| 29052016:08:01|10.56|
| SPOT| 29052016:12:30|11.23|
| FWD| 29052016:13:20|23.20|
| FWD|29052016:14:340|56.00|
| FWD| 29052016:08:01|10.56|
| SPOT| 29052016:12:30|11.23|
| FWD| 29052016:13:20|23.20|
+-------+---------------+-----+